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
?