So halten Sie den letzten Frame bei Verwendung von ffmpeg

9

Ich schneide / konvertiere einige Videos mit ffmpeg. Was ich wirklich möchte, ist, dass der Ausgang das letzte Bild einige Sekunden lang hält (mit Stille für Audio). Ist so etwas möglich? Oder muss ich irgendwie das letzte Bild bekommen und daraus ein neues Video machen?

Xorsyst
quelle

Antworten:

11

Eine Methode ist die Verwendung des overlayVideofilters . Angenommen, Ihr Video ist 640 x 480, 30 Sekunden Dauer, 25 Bildrate:

ffmpeg -f lavfi -i nullsrc=s=640x480:d=35:r=25 -i video.mp4 -i audio.wav -filter_complex \
"[0:v][1:v]overlay[video]" -map "[video]" -map 2:a -codec:a copy -shortest output.mkv
  • Ich habe die Dauer des nullsrcQuellfilters auf 5 Sekunden länger als eingestellt input.mkv.

  • Das Standardverhalten der Überlagerung besteht darin, den letzten Frame der überlagerten Quelle zu wiederholen. Siehe die eof_actionOption für andere Verhaltensweisen.

  • Das Audio in diesem Beispiel wird im Stream kopiert (neu gemuxt), anstatt neu codiert zu werden.

  • Der Nachteil ist, dass dieses Beispiel eine Neucodierung erfordert, da ein Filter verwendet wird. Dies ist jedoch möglicherweise einfacher als andere Methoden, da es sich nur um einen Befehl handelt.

llogan
quelle
Das hört sich toll an - aber kann ich das tun, wenn ich auch den Audiostream durch eine WAV-Datei ersetze? Muss ich auch die Größe des Quellvideos kennen?
Xorsyst
1
@xorsyst Ja, Sie können das Audio ersetzen. Ich habe das Beispiel aktualisiert. Ja, für diese Methode müssen Sie die Bildgröße, Dauer und Bildrate des Quellvideos kennen. Alle diese Variablen können jedoch per Skript erstellt werden. Siehe FFprobe-Tipps .
llogan
0

Ich glaube, die Antwort auf Ihre Frage lautet "Ja". Ich bin mit FFMPEG nicht besonders vertraut, aber der einfachste Weg, um Ihr Ziel zu erreichen, besteht darin, zuerst das letzte Bild in ein Bild zu extrahieren, ein Video von einigen Sekunden zu erstellen und dann eine Codierung auszuführen, die das Hauptvideo und Ihr Video verkettet neu erstelltes Video in einem Durchgang.

AJ Henderson
quelle