Ich habe viele Videos und ich muss ein Bild für etwa 5 Sekunden davor stellen, aber das manuelle Hinzufügen und jedes Mal Rendern würde sehr lange dauern, also frage ich, ob es möglich ist, dies über ffmpeg zu tun, und wenn Sie könnte mir da bitte weiterhelfen da ich keine erfahrung mit ffmpeg habe. Ich habe schon einige Befehle gefunden, aber keiner hat funktioniert. Dieser zum Beispiel.
ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4
Sie können eine einfache Bildüberlagerung mit der folgenden Syntax erstellen:
ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4
overlay=25:25
bedeutet, dass wir das Bild 25 Pixel nach rechts und 25 Pixel nach unten positionieren möchten, ausgehend von der oberen linken Ecke (0:0).
enable='between(t,0,20)'
bedeutet, dass das Bild zwischen Sekunde 0 und 20 angezeigt werden soll.
[0:v][1:v]
bedeutet, dass wir möchten, dass die erste Videodatei, die wir mit importieren -i
, in unserem Fall input.mp4 oder wie ffmpeg es sieht, die Videoeingabedatei Nummer 0, unter der Videoeingabedatei 1 liegt, in unserem Fall image.png. :v
bedeutet nur, dass wir die Videospur aus diesen Dateiquellen wollen. [0:a]
würde bedeuten, wir wollen die erste importierte Audiospur. Das würde auch von input.mp4 kommen, würde aber auf die Audiospur statt auf die Videospur in der mp4-Datei verweisen.
Wenn Sie eine bestimmte Bildqualität/Einstellungen und nicht die von ffmpeg gewählten Einstellungen wünschen, fügen Sie die gewünschten Bild- und/oder Audiokodierungsoptionen hinzu. Der standardmäßige Video-Encoder ist x264. Informationen zu möglichen Einstellungen finden Sie im H.264-Kodierungsleitfaden .
Das -acodec copy
/ -c:a copy
, das Sie in Ihrem Befehl haben, würde einfach das Audio aus der Quelldatei wiederverwenden. Obwohl Sie das mit dem Video natürlich nicht machen können (in diesem Fall), muss es transkodiert werden, weil wir eine neue Videoquelle erstellen.
Wenn Sie Audio transcodieren möchten, entfernen Sie den -c:a copy
Teil. Eventuell müssen Sie explizit einen Encoder angeben, zB -c:a aac -strict experimental
. Weitere Informationen finden Sie im AAC-Codierungsleitfaden .
pix_fmt
argumentiert? Ich sehe das in den meisten ffmpeg-Befehlen da draußen, aber ob ich es einfüge oder entferne, das Ergebnis ist dasselbe. Ist es wirklich sinnvoll, es in den Befehl aufzunehmen?Dies ist eine Ergänzung zur hervorragenden Antwort von PTS und eine Antwort für Chovy. Wenn Sie das Overlay in der unteren rechten Ecke platzieren möchten, kann FFMPEG dies sehr einfach für Sie berechnen.
Verwenden Sie den modifizierten Befehl:
ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=W-w:H-h:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4
Das Ww bedeutet Hauptvideobreite minus Overlay-Breite und das gleiche für Hh.
W
ist ein ffmpeg
Alias für die Breite des Videos, das Sie überlagern, und w
ist der Alias für die Breite des Bildes, das überlagert wird. Das gleiche mit H
und h
. Diese können auch als main_w
(oder _h
) und overlay_w
(oder _h
)
bezeichnet werden.filter_complex
das Ausgabevideo auch immer die gleiche Größe wie das Eingabevideo? Oder hat es die gleiche Größe wie die größere Größe des Eingabevideos und des Overlay-PNG?
Timonku
Azthy