Fügen Sie mit ffmpeg eine Bildüberlagerung vor dem Video ein


31

Ich habe viele Videos und muss ein Bild für ca. 5 Sekunden davor platzieren, aber das manuelle Hinzufügen und Rendern würde jedes Mal sehr viel Zeit in Anspruch nehmen. Daher frage ich mich, ob dies über ffmpeg möglich ist und ob Sie dies tun könnte mir da bitte helfen da ich keine erfahrung mit ffmpeg habe. Ich habe bereits 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

1
Haben Sie diesen Befehl einfach kopiert oder entsprechend Ihren Anforderungen geschrieben? Ich frage, weil dieser Befehl Dinge wie ein Ausblenden und alle möglichen anderen Dinge beinhaltet, die in Ihrer Frage nicht behandelt werden. Müssen Sie nur ein Bild überlagern oder benötigen Sie mehr als das?
PTS

Ich habe es von irgendwoher kopiert. Ich brauche nur das Bild vor das Video zu stellen.
Azthy

Antworten:


44

Sie können eine einfache Bildüberlagerung mit der folgenden Syntax ausführen:

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 25px nach rechts und 25px nach unten positionieren möchten, und zwar ausgehend von der oberen linken Ecke (0: 0).

enable='between(t,0,20)' bedeutet, dass das Bild zwischen 0 und 20 Sekunden angezeigt werden soll.

[0:v][1:v]bedeutet, dass die erste Videodatei, mit der wir importieren -i, in unserem Fall input.mp4 oder wie ffmpeg sie als Videoeingabedatei 0 ansieht, in unserem Fall image.png unter Videoeingabedatei 1 liegen soll. :vbedeutet nur, dass wir Video 0 und Video 1 [0:a]wollen. bedeutet, dass wir die erste importierte Audiospur wollen. Was auch von input.mp4 kommen würde, aber auf die Audiospur anstatt auf die Videospur in der mp4-Datei zeigen würde.

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 Standard-Video-Encoder ist x264. Überprüfen Sie die H.264-Codierungsanleitung auf mögliche Einstellungen.

Das -acodec copy/ -c:a copy, das Sie in Ihrem Befehl haben, zB würde das Audio aus der Quelldatei einfach wiederverwenden. Das geht natürlich nicht mit dem Video (in diesem Fall), aber das muss transkodiert werden, da wir eine neue Videoquelle erstellen.

Wenn Sie Audio transkodieren möchten, entfernen Sie den -c:a copyTeil. Möglicherweise müssen Sie explizit einen Encoder angeben, z -c:a aac -strict experimental. Weitere Informationen finden Sie im AAC-Codierungshandbuch .


Die folgende Iteration des obigen Befehls hat bei Android funktioniert, da der ursprüngliche Befehl aac ausgibt und Fehler wie aac ein experimentelles Feature ist: ffmpeg -i input.mp4 strict -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable = 'between (t, 0,20)' output.mp4
muneikh

gibt es sowieso unten zu positionieren ohne die höhe zu kennen? oder ganz rechts ohne die Breite zu kennen?
Chovy

Analysieren Sie das Video einfach mit ffprobe und extrahieren Sie die Abmessungen des Videos aus der Ausgabe. Möglicherweise ist in ffmpeg auch eine Option integriert, die mir jedoch nicht bekannt ist.
PTS

3
Ihr Befehl ersetzt ein Fragment der ursprünglichen Videodatei, ein Benutzer möchte jedoch möglicherweise vor und / oder nach dem Video ein Bild hinzufügen (wodurch die Videolänge erhöht wird). Bitte helfen Sie dabei
Porton

1
@laurent, das von Ihrer Quelldatei und / oder Ausgabe abhängt. pix_fmt steht für pixel format. Es sind viele verschiedene Pixelformate für verschiedene Codecs verfügbar. Wenn Sie eines angeben, wird sichergestellt, dass Sie nicht mit etwas enden, das für Sie nicht funktioniert. yuv420p ist das am meisten unterstützte Pixelformat für h264, aber es gibt zum Beispiel auch yuv422p und yuv444p.
PTS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.