Ich führe den folgenden Befehl aus:
ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov
Was erfolgreich ein Video mit meinem aufgenommenen Audio und einem Bild darauf ausgibt.
Wenn ich versuche, dies auf YouTube hochzuladen, kann es nicht verarbeitet werden, unabhängig von den Formaten, die ich versuche: .mov, .avi, .flv, .mp4
Gibt es eine Einstellung, die mir oben fehlt und die ein Format erzeugt, das Youtube akzeptiert? Ich habe versucht, die ffmpeg-Dokumentation durchzusehen, bin aber über den Kopf gegangen.
Ich habe ein Experiment durchgeführt, indem ich ein 2-Sekunden-Video mit einer 30-Sekunden-MP3-Datei aufgenommen habe. Beim Hochladen auf YouTube war das resultierende Video nur 2 Sekunden lang. So kann es sein, dass YouTube nur nach der Länge der Videospur schaut, und da ein Bild nur einen Frame lang ist oder was auch immer, ist es vielleicht so, dass es kaputt geht.
Ein Stück Code, der für mich funktioniert, aus einem anderen Forum:
quelle
Ich nahm den Code von Pavel, der auch für mich funktionierte, und verkürzte ihn, indem ich unnötige Optionen schnitt:
Dies ist eine allgemeine Form, die mit jeder Bild- und Audiodatei als Eingabe arbeitet und eine Videodatei als Ausgabe erzeugt.
Da Ihr Videostream jedoch aus einem Bild besteht, das auf unbestimmte Zeit wiederholt wird, können Sie eine niedrige Bildrate (dh die Anzahl der Bilder, die in einer Sekunde angezeigt werden) einstellen
-r
. Beachten Sie, dass nicht alle Ausgabecontainer niedrige Bildraten zulassen. Eine, die dies tut, istavi
, also könnten Sie Folgendes tun:Dadurch wird eine Videodatei mit einer Bildrate von 0,1 (dh ein Bild alle 10 Sekunden) anstelle der Standardeinstellung von 25 erstellt. Dies wirkt sich auf die Dateigröße, jedoch nicht auf die Videoqualität aus. Schließlich können Sie die Audio-Bitrate einstellen, um eine bessere Audioqualität zu erzielen
-ab
. Dies ist der Befehl, den ich tatsächlich verwende, um diese Art von Videos für YouTube zu erstellen:quelle
ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avi
aber bekam "Option Schleife nicht gefunden." Irgendwelche Ideen?ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
mit avconv:
quelle
-shortest
Ausgabeoptionen, anstatt Zeiten manuell zu deklarieren (verwenden Sie auch, wenn möglich ,ffmpeg
anstattavconv
).Nachdem ich viel experimentiert hatte, funktionierte das: https://www.youtube.com/watch?v=qjlDT819Q3s
Konvertieren Sie Bilder in Videos gemäß https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images :
ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4
Hier verwende ich mehrere Bilder und lasse sie alle 20s wechseln.
Verknüpfen Sie genügend Kopien des obigen Videos, um die Dauer Ihres Audios gemäß https://trac.ffmpeg.org/wiki/Concatenate zu überbrücken . Andere Lösungen, wie die Erwartung
ffmpeg -i wav.wav -i png.mp4 youtube.mp4
, das Richtige zu tun, wurden von YouTube abgelehnt (auch Player wie VLC sind verwirrt und können nicht richtig suchen). Ich vermute, dass die Zeitpositionen in den Kopien angepasst werden müssen, wasffmpeg
nicht der Fall ist, es sei denn, sie sind verkettet:ffmpeg -f concat -i pngs.txt -c copy pngs.mp4
(wobei die Datei
pngs.txt
handgemacht ist, um so viele Kopien wie nötig zu enthalten: Kopien = Audiolänge / Videolänge)Mische dein Audio mit dem in 2 erhaltenen Video gemäß https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ :
ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4
Jetzt sollte die Datei
youtube.mp4
von YT akzeptiert werden.quelle