TL; DR-Version:
In diesem Beispiel wird nur Video ausgeführt, vorausgesetzt, beide Videoclips haben dieselbe Auflösung, Bildrate usw. Dadurch wird zwischen Fadeoutclip und Fadeinclip eine 1-Sekunden-Überblendung erstellt. Angenommen, der Fadeoutclip ist 10 Sekunden lang. Beachten Sie, dass dies aus Gründen der Übersichtlichkeit formatiert ist: Es handelt sich wirklich um eine Codezeile.
ffmpeg -i fadeoutclip.mp4 -i fadeinclip.mp4 -an \
-filter_complex "\
[0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[firstclip]; \
[1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip]; \
[0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[fadeoutsrc]; \
[1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc]; \
[fadeinsrc]format=pix_fmts=yuva420p, \
fade=t=in:st=0:d=1:alpha=1[fadein]; \
[fadeoutsrc]format=pix_fmts=yuva420p, \
fade=t=out:st=0:d=1:alpha=1[fadeout]; \
[fadein]fifo[fadeinfifo]; \
[fadeout]fifo[fadeoutfifo]; \
[fadeoutfifo][fadeinfifo]overlay[crossfade]; \
[firstclip][crossfade][secondclip]concat=n=3[output] \
" \
-map "[output]" <add in encoding part here>
Vollversion:
Hier ist eine Erklärung, worum es ging:
Eingabespezifikation ... offensichtlich
ffmpeg -i fadeoutclip.mp4 -i fadeinclip.mp4 -an
Erstellen eines filter_complex
: vorausgesetzt, Sie verstehen bereits Filterkomplexe:
-filter_complex
Zuerst teilen wir die beiden Streams mithilfe des Trimmfilters in zwei Teile : den Inhalt und den Überblendungsabschnitt. Das Ausblenden wird in Inhalt und Ausblendabschnitt unterteilt, während das Einblenden in den Ausblendabschnitt und den Inhalt geschnitten wird. Insgesamt vier Abschnitte.
Beachten Sie, dass streng genommen, wissen wir nicht haben Sie die Cross - Fade - Abschnitte zu brechen: Wir konnten nur die Fade - Out und Fade - in - Zeiten für die beiden Videoclips festlegen. Auf diese Weise können wir jedoch:
In jedem dieser vier Abschnitte werden Folgendes angegeben: Startzeit (Sekunden), Endzeit (Sekunden) und der mysteriöse setpts=PTS-STARTPTS
Filter , mit dem jeder Video-Subclip im Wesentlichen bei 0 Sekunden beginnt. Dies ist wichtig, wenn Sie sie neu zusammensetzen.
Beachten Sie, dass die s=0
Spezifizierer redundant sind und der setpts
Filter für diese s=0
AUCH redundant ist. Beide werden jedoch redundant angegeben, um eine Änderung der Startzeit von 0 zu ermöglichen, ohne den Filterkomplex zu unterbrechen. Außerdem wird der zweite Inhaltsclip bis zum Ende ausgeführt, sodass der e=
Teil (end =) nicht angegeben wird.
[0:v]trim=s=0:e=9,setpts=PTS-STARTPTS[firstclip];
[1:v]trim=s=1,setpts=PTS-STARTPTS[secondclip];
[0:v]trim=s=9:e=10,setpts=PTS-STARTPTS[fadeoutsrc];
[1:v]trim=s=0:e=1,setpts=PTS-STARTPTS[fadeinsrc];
Als Nächstes geben wir das Ein- und Ausblenden an: Zunächst fügen wir beiden Einblendabschnitten einen Alpha-Kanal (Transparenzkanal) hinzu, indemyuva420p
wir ein Pixelformat von angeben . Sie können tatsächlich jedes Format verwenden, das einen Alphakanal bereitstellt.
Als nächstes wird in diesem Filter Subkomplex wir eine angeben heraus zu verblassen, und ein verblassen in. Die alpha=1
bedeutet , dass das Video selbst nicht verdunkeln wird, wird nur die Transparenz Menge wird „fade“. st
bedeutet Start, d
bedeutet Dauer.
[fadeinsrc]format=pix_fmts=yuva420p,
fade=t=in:st=0:d=1:alpha=1[fadein];
[fadeoutsrc]format=pix_fmts=yuva420p,
fade=t=out:st=0:d=1:alpha=1[fadeout];
Was ist das?: Der fifo
Filter stellt sicher, dass im Filterkomplex Pufferplatz verfügbar ist. Erstaunlicherweise ist dies NICHT die Standardeinstellung. Wenn Sie dies nicht tun, kann die Überblendung fehlschlagen, wenn die Ausgabe der obigen Stufe den unteren Überlagerungsfilter überschreitet. Ja, ich weiß, was Sie gerade denken. Es ist in der Tat ein FFMPEG-Fehler .
[fadein]fifo[fadeinfifo];
[fadeout]fifo[fadeoutfifo];
Überlagern Sie nun die beiden Überblendungsabschnitte: Indem Sie sicherstellen, dass die beiden Überblendungsabschnitte dieselbe Größe haben, müssen wir uns keine Gedanken über die ziemlich unangenehmen Optionen machen, die der Überlagerungsfilter bietet (und ignorieren sie daher hier):
[fadeoutfifo][fadeinfifo]overlay[crossfade];
Schließlich richten wir unsere drei Segmente mit dem Concat-Filter aus .
[firstclip][crossfade][secondclip]concat=n=3[output]
Und jetzt ordnen Sie das Ausgabefeld als Ihre Videoquelle zu.
VERGESSEN SIE NICHT, das Pixelformat auf das einzustellen, was Sie normalerweise verwenden (normalerweise yuv420p
), da der Überblendungsabschnitt es yuv420
auf dem Ausgangskanal eingestellt hat! (Da wir es nicht angegeben haben, können Sie die Overlay-Argumente verwenden.) Wenn Sie WOLLEN yuv420
, geht es Ihnen natürlich gut :-)
-map "[output]" <add your normal encoding part here>
Sie können Audio später erneut kombinieren (außerhalb des Bereichs dieser Fragen und Antworten).