# 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.
-report
added aus und geben Sie den Bericht frei.Es ist ein schrecklicher Hack, aber das könnte funktionieren, wenn Sie nur Audio ein- / ausblenden möchten, aber nicht genau wissen, wie lang der Clip ist:
[edit 2019-07-24: Beachten Sie, dass diese Lösung nicht für Streaming-Lösungen geeignet ist, da der gesamte Track verarbeitet werden muss, bevor das erste Byte gestreamt werden kann.]
Eine andere Option, die ich
acrossfade
mit einer stillen Spur verwenden soll:quelle
Die Antwort auf Frage 2 ist ein klares JA! Ich suchte nach der gleichen Funktionalität und schrieb schließlich ein Bash-Skript, das nach der Ausblendungsdauer in Sekunden fragt und das anfängliche Bild für das Ausblenden berechnet:
Überblendungen erfordern eine Neucodierung. Verwenden Sie daher einen niedrigen
crf
Wert, um einelibx264
Neucodierung von hoher Qualität zu erzielen. Die Kommentare sollten alles andere erklären.quelle
automatically figure out the duration
verwendetffprobe
, was mit installiert wirdffmpeg
. Wer hat etwas über eine Beschränkung der Anzahl der Befehle gesagt oder*nix
? Es scheint, dass das OP eine Version von UNIX verwendet. Nein.exe
imffmpeg
Befehl. Ich selbst benutze dasOS X
worauf aufgebaut istUNIX
aber nichtUNIX
.ffprobe
aber ein integraler Bestandteil derffmpeg
Distribution. Du wählst bei Nissen, um Gesicht IMO zu retten.