Wie starte ich ein Wasserzeichen-Video, wenn es erscheint?

986
stuzzo

Das ist mein Szenario:

Ich möchte ein Wasserzeichen-Video in einem anderen Video hinzufügen, aber ich möchte, dass das Wasserzeichen beginnt, wenn es erscheint.

Eigentlich kann ich ein Wasserzeichen-Video anzeigen und von Anfang an abspielen. Wenn ich versuche, das Wasserzeichen in einem bestimmten Intervall hinzuzufügen, wird es im angegebenen Zeitraum korrekt angezeigt. Das Wasserzeichen wird jedoch angehalten angezeigt, da es mit der Wiedergabe des Hauptvideos beginnt.

Dies ist der Befehl, den ich verwende:

ffmpeg -y -i big_buck_bunny.mp4 -i alpha.mov -filter_complex "[1: v] fade = out: st = 30: d = 1: alpha = 1 [ov]; [0: v] [ov] overlay = 10: main_h-overlay_h-10: enable = zwischen (t \, 3 \, 5) [v] "-map" [v] "-map 0: a -c: v libx264 -c: eine Kopie out.mp4

Jede Hilfe wäre dankbar. Vielen Dank

2
Willkommen bei Super User. Diese Frage bedarf einiger Klarstellung. Insbesondere die Aussagen _ "Ich möchte, dass das Wasserzeichen beginnt, wenn es" _ und _ "erscheint, wird angehalten, weil es startet, wenn das Hauptvideo abgespielt wird." _ Willkommen und viel Glück. Twisty Impersonator vor 9 Jahren 1

1 Antwort auf die Frage

5
NuTTyX

Verwenden Sie -itsoffsetkurz vor der überlagerten Eingabe die gleiche Anzahl Sekunden, die Sie beim Start des Filters verwenden (in Ihrem Fall 3).

Dadurch wird der von fade outIhnen verwendete Filter beibehalten, aber dieser Filter liefert keine sichtbaren Ergebnisse:

ffmpeg -y -i big_buck_bunny.mp4 -itsoffset 3 -i alpha.mov -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:main_h-overlay_h-10:enable=between(t\,3\,5) [v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy out.mp4 

Dies ist mit 3 Eingängen (2 Overlays und einer Basis) und ohne diesen anderen Filter:

ffmpeg -y -i basevideo.mp4 -itsoffset 3 -i overlay1.mp4 -itsoffset 8 -i overlay2.mp4 -filter_complex "[0:v][1:v] overlay=0:0:enable=between(t\,3\,5) [oa]; [oa][2:v] overlay=0:0:enable=between(t\,8\,10) [ob]" -map "[ob]" -map 0:a -c:v libx264 -c:a copy output.mp4 

So fügen Sie weiterhin überlagerte Videos hinzu:

  • -itsoffset **X** -i newinput.mp4nach letzter Eingabedatei hinzufügen .
    • Reihenfolge der Eingabedateien ist wichtig
    • **X**das Overlay - Video ist die Zeit wird beginnen zu spielen (dies nicht, wird zeigen, das Overlay, nur intern das Spiel des Videos starten). Passen Sie es als notwendig an (wahrscheinlich **X**im nächsten Schritt mit dem Wert von ).
  • [**previous_output**][**Y**:v] overlay=0:0:enable=between(t\,**X**\,**Z**) [**new_output**]Nach dem letzten Satz noch einen einfügen .
    • **Y** ist die Y-te Eingabedatei, beginnend mit 0 (in meinem Beispiel ist basevideo 0, overlay1 ist 1, overlay2 ist 2 usw.).
    • **X**die Überlagerung ist die Zeit wird zeigen, in der Video - Ausgang auf.
    • **Z**die Überlagerung ist die Zeit versteckt in der Video - Ausgang.
    • Die Zeit wird wie für den Start des Basevideos gezählt, nicht die Länge des überlagerten Videos. Berechnen Sie daher die Dauer: Wenn das Überlagerungsvideo 2 Sekunden lang ist, **Z**wird es **X**+2 sein.
  • Passen Sie das -map "[**XX**]am Ende des Befehls an das an **new_output**, oder Sie schreiben den vorherigen Schritt in die Datei!

HINWEIS Audio wird direkt von Basevideo abgerufen . Die Audios der anderen Quellen werden ignoriert und überhaupt nicht abgespielt.

Vielen Dank! Kann ich Sie fragen, wie Sie den Befehl konfigurieren sollen, wenn ich mehr als eine Überlagerung habe? stuzzo vor 9 Jahren 0
@stuzzo verbesserte Antwort NuTTyX vor 9 Jahren 0
Alles klar! Vielen Dank!!!!!!! stuzzo vor 9 Jahren 0