Ich habe ein langes Video mit verschiedenen Szenen. Ich möchte mit ffmpeg 2.1.4 2 Szenen aus dem Video extrahieren und verketten (die nicht auf einem I-Frame beginnen).
Nehmen wir als Argument an, ich möchte 5 Sekunden zwischen 01:00 und 02:00.
Ich kann dies tun:
ffmpeg -ss 01:00 -i in.mkv -ss 02:00 -i in.mkv -filter_complex "
[0:v]select='lt(t,5)'[v0];
[0:a]aselect='lt(t,5)'[a0];
[v0][a0][1:v][1:a]concat=n=2:v=1:a=1
" -c:a libvorbis -t 10 out.mkv
Das gibt mir den gewünschten Film, aber select zwingt ffmpeg tatsächlich dazu, den gesamten Rest des Films zu dekodieren. Wie kann ich es also veranlassen, den ersten Film abzuschneiden, anstatt ihn zu dekodieren?
Ich würde es vorziehen, wenn möglich, dies mit einem komplexen ffmpeg-Filter zu tun. Ich weiß, dass ich nur verwenden kann, -t
um zuerst separate Filme zu rekodieren, aber der zusätzliche Kodierungsschritt ist in meinem Fall sehr langsam und verliert auch einiges an Qualität für dieses Video.
Ich kann anscheinend keinen Filter finden, der die Länge eines Dampfes abschneidet. Gibt es Filterknoten, die den Parametern -t
oder entsprechen -ss
?
-filter_complex
funktioniert das, aber dieconcat
Dateien nicht - dh das erste Video sieht gut aus, aber die Qualität des zweiten ist schrecklich. Beachten Sie, dass ich diese Befehle genau für beide kopiert habe (mit Ausnahme der Eingabedatei).Das sollte schneller gehen ...
Es ist nicht erforderlich, -t in der Ausgabe anzugeben. Es ist nicht erforderlich, Audio und Video vor dem Concat zu trennen.
quelle