Wie entferne ich überschüssige Videodauer in ffmpeg, wenn ich lavfi verwende?

Mein Ziel ist es, Clips zu nehmen, die länger als 40 Sekunden dauern, und sie auf einen Hintergrund zu legen und dann die Gesamtzeit zu kürzen, sobald die Clips und der Hintergrund ausgeblendet sind. Es funktioniert großartig, außer dass die Suche bis zu 24 Sekunden dauert, selbst wenn ich 21 angebe.

ffmpeg -y -framerate 60 -loop 1 -ss 0 -t 21 -i ~/Desktop/FP2.tiff -ss 0 -t 21 -i ~/Desktop/fp.mov -lavfi \
"[0]fade=t=in:st=0:d=1,fade=t=out:st=20:d=1,trim=end=21[bg]; \
[1:v]setpts=(PTS-STARTPTS)+1/TB,fifo,fade=t=in:st=1:d=2,fade=t=out:st=15:d=2[fade]; \
[bg][fade]overlay=10:(main_h-overlay_h)/2:format=rgb[v1]; \
[1:v]setpts=(PTS-STARTPTS)+3/TB,fifo,fade=in:0:120,fade=t=out:st=18:d=2[v2]; \
[v1][v2]overlay=460:(main_h-overlay_h)/2:format=rgb[video]; \
[1:a]adelay=1000|1000,stereotools=muter=1,afade=t=in:st=1:d=2,afade=t=out:st=15:d=2[a1]; \
[1:a]adelay=3000|3000,stereotools=mutel=1,afade=t=in:st=3:d=2,afade=t=out:st=18:d=2[a2]; \
[a1][a2]amix=inputs=2[audio]" \
-map [video] -map [audio] -c:v ffv1 -level 3 -c:a pcm_s16be ~/Desktop/filtergraph.nut

Sie können dies in ffplay sehen; Der Hintergrund wird bei der 21-Sekunden-Marke vollständig ausgeblendet, aber das Video selbst endet bei 24 Sekunden. Wie bringe ich sie dazu, genau zusammenzupassen? Mir ist bewusst, dass ich -ssund -tnach den Eingaben verwenden kann, aber diese Methode kann langsam sein, wenn Sie beabsichtigen, einen Startpunkt nach 0 zu verwenden.

Mir ist bewusst, dass ich -ss und -t nach den Eingaben verwenden kann -> Sie können Ihren aktuellen Befehl beibehalten und einfach nach den Eingaben hinzufügen -t 21 .

Antworten (1)

Sie speisen 21 Sekunden Audio aus der Videodatei ein und wenden dann adelay=3000|3000an, also 24 Sekunden. Fügen Sie atrim=end=21am Ende zu Ihren beiden Audio-Filterketten hinzu.

Und

Fügen Sie shortest=1beide Overlays hinzu.

Ich bekomme immer noch die 24 Sekunden, wenn ich das versuche, auch wenn ich die Sekunden für atrim unter 21 senke.
Funktioniert hier. Wo hast du den Atrim platziert?
[1:a]adelay=1000|1000,stereotools=muter=1,afade=t=in:st=1:d=2,afade=t=out:st=15:d=2,atrim=end=21 [a1]; \
Das Hinzufügen am kürzesten funktionierte und jetzt endet das Video ordnungsgemäß, nachdem der Hintergrund ausgeblendet wurde. ffprobe und ffplay melden die Dauer immer noch als 20,98 statt 21 (der endgültige codierte Frame sagt 21 flach), aber für alle Absichten ergibt dies das erwartete Ergebnis. Danke für die Hilfe!