Das Überblenden von zwei Videoinhalten ist in FFmpeg eigentlich ziemlich kompliziert. Es gibt keinen "Überblend" -Filter wie für Audio.
Was ist ein effizienter Weg, um es zu tun?
ffmpeg
video-editing
Mark Gerolimatos
quelle
quelle
[0:a][1:a] acrossfade=d=1 [audio]
zum Filter und dann-map "[audio]"
zum Befehl hinzugefügt und es hat funktioniert. Wenn Sie möchten, testen Sie es und aktualisieren Sie die Antwort!Antworten:
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.
Vollversion:
Hier ist eine Erklärung, worum es ging:
Eingabespezifikation ... offensichtlich
Erstellen eines
filter_complex
: vorausgesetzt, Sie verstehen bereits Filterkomplexe: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:
overlay
FilterverwendungIn 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 dersetpts
Filter für dieses=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 dere=
Teil (end =) nicht angegeben wird.Als Nächstes geben wir das Ein- und Ausblenden an: Zunächst fügen wir beiden Einblendabschnitten einen Alpha-Kanal (Transparenzkanal) hinzu, indem
yuva420p
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.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 .Ü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):
Schließlich richten wir unsere drei Segmente mit dem Concat-Filter aus .
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 esyuv420
auf dem Ausgangskanal eingestellt hat! (Da wir es nicht angegeben haben, können Sie die Overlay-Argumente verwenden.) Wenn Sie WOLLENyuv420
, geht es Ihnen natürlich gut :-)Sie können Audio später erneut kombinieren (außerhalb des Bereichs dieser Fragen und Antworten).
quelle
trim=start=0:end=9
, (anstatttrim=st=0:e=9,
..Filter setpts has an unconnected output
für das Skript. Ich habe die Trimmparameter bereits auf Start und Ende geändert.