So verwenden Sie ffmpeg zum Ein- und Ausblenden eines Videoclips mit verifizierbarer Bildrate und unbekannter Dauer

Ich habe nach einer Möglichkeit gesucht, ffmpeg zu verwenden, um einige MPEG-4-Videodateien (Basismedien / Version 2) herunterzuskalieren, die mit einer variablen Bildrate aufgezeichnet wurden, und Ein-/Ausblendeffekte am Anfang und Ende jedes Clips hinzuzufügen.

Basierend auf der hier gegebenen Antwort habe ich die folgende Befehlszeile verwendet, um meinen Clips einen 2-Sekunden-Fade/Out-Effekt hinzuzufügen:

ffmpeg -i VID_1.mp4 -sseof -2 -copyts -i VID_1.mp4 -lavfi "[1]fade=out:s=0:d=2[tail];[0][tail]overlay,fade=in:s=0:d=2[overlay]; anullsrc,atrim=0:4[audiotail];[0][audiotail]acrossfade=d=2,afade=d=2[audio];[overlay]scale=640:-1[video]" -map "[video]" -map "[audio]" -vsync 2 -sws_flags gauss -c:v libx264 -crf 18 -preset slow -shortest -report -hide_banner VID_1_out.mp4

Meine Fragen:

  1. Ich scheine viele der folgenden Fehlerzeilen im Bericht zu erhalten

cur_dts is invalid (this is harmless if it occurs once at the start per stream)

Es ist normal?

  1. Im resultierenden Ausgabevideoclip dauert die Einblendung weniger als 2 Sekunden (ca. 1 Sekunde) und es erscheint keine Ausblendung, sondern nur ein Blackout für die letzten vier Sekunden. Wo ist meine Befehlszeile falsch?

  2. Die Dauer des Originalclips beträgt 24s640ms, die Ausgabedatei ist um 2s022ms länger. Warum zusätzliche 22 ms?

Wenn ich die -vsync 2Option lösche, wird die Bildrate des Ausgabeclips genau die gleiche wie die der Quellvideodatei. Dies beseitigt jedoch nicht die oben genannten Probleme.

Teilen Sie Ihre Datei.
Link - der Original-Videoclip; link - die von ffmpeg erstellte Protokolldatei; link - die verwendete ffmpeg-Version
Videodatei kann nicht heruntergeladen werden - Dateizugriffsfehler.
Es ist kein Passwort festgelegt, daher sollten alle drei Dateien zum Download bereitstehen. Der Link zur Videodatei lautet filebin.ca/3qaIGfKJdhBs/VID_1.zip
Oder diesen Link sendspace.com/file/h47mib

Antworten (1)

Das funktioniert hier

ffmpeg -i VID_1.mp4 -sseof -2 -copyts -i VID_1.mp4 -lavfi "[1]fade=out:s=1:d=2[tail];[0][tail]overlay,fade=in:s=0:d=2,scale=640:-2[video];anullsrc,atrim=0:2.1[audiotail];[0][audiotail]acrossfade=d=2,afade=d=2[audio]" -map "[video]" -map "[audio]" -vsync 2 -sws_flags gauss -c:v libx264 -crf 18 -preset slow -shortest -report VID_1_out.mp4

Bei einigen Videos, normalerweise solchen mit variablen FPS, funktioniert der Fade-Filter nur mit einem Startbild ungleich Null. Außerdem muss anullsrc nur geringfügig größer als die Crossfade-Dauer sein.