# 1 So blenden Sie den Ton gleichzeitig ein / aus:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
Die Verblassungszeiten sind in Sekunden angegeben .
# 2 automatisch? Aber sehen Sie sich die Problemumgehung unten an
Sie können zuerst ffprobe ausführen, um die Dauer abzurufen.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Sie werden so etwas bekommen:
video|13.556000
audio|13.816000
Sie können dann die oben genannten verwenden, um Ihre Fades zu platzieren. Diese Zeiten sind in Sekunden angegeben.
Umgehung
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg hat eine sseof
Option, mit der man am Ende nach einer Eingabe suchen kann. Damit können wir unser Ziel erreichen. Also füttern wir die Eingabe zweimal, wobei das zweite Mal nur die letzte Sekunde aufgenommen wird. Wir weisen FFmpeg an, die Zeitstempel beizubehalten, damit ffmpeg die zeitliche Position dieses Endabschnitts beibehält.
Wir wenden eine Überblendung auf diesen Schwanz an und überlagern dann das Ergebnis auf den gesamten Eingang. Da es sich um dieselbe Mediendatei handelt, deckt der Vordergrund den Hintergrund vollständig ab, und da copyts
die Überlagerung angewendet wurde, erfolgt sie auf dem entsprechenden identischen Frame in der Hintergrundeingabe.
Für Audio erstellen wir ein leeres Dummy-Audio mit einer Dauer von 2 Sekunden und wenden dann eine Audioüberblendung vom Haupt-Audio auf dieses Dummy-Audio an. Da der zweite Ton leer ist, wird der Haupteingang ausgeblendet. Das -shortest
wird hinzugefügt, um Teile des Dummy-Audios nach dem Überblenden wegzulassen.