png in png mit transparenz in ein mp4-video

1791
papas-source

Ich versuche, eine PNG-Datei mit Transparenz in einem MP4-Video zu überlagern

Das Originalvideo ist 20 Sekunden lang und ich möchte das transparente PNG von 00:10 bis 00:20 des Originalvideos überlagern, wobei 00:10 - 00:14 eingeblendet werden.

 0s 10s 14s 20s video |---------------------------------+--------+-------------------------| png | . . . . . . . . . . . . . . . . +========+-------------------------| | | | start png fade-in _/ | | | | end png fade-in _/ | end of .png overlay _/ 

Ich kann den Png-Fadein-Effekt nicht erzeugen. Ich habe versucht, ein transparentes mov mit zu erstellen

ffmpeg -loop 1 -i file.png -frames:v 300 -vf 'fade=in:0:120' \ -pix_fmt rgba -vcodec png output.mov 

und Verbinden der 2 Dateien mit

../ffmpeg -y -i video.mp4 -i output.mov -filter_complex \ "[0:v][1:v] overlay=170:150:enable='between(t,10,20)'" final.mp4 

aber das fertige video zeigt den mov blitzschnell an, ohne einzugreifen.

Fehlt mir etwas?

Danke im Voraus,

1

1 Antwort auf die Frage

3
Rajib

Sie müssen das Overlay-Mov nicht als separaten Schritt erstellen.

Erstellen Sie zunächst die Überlagerung wie einen Film auf diese Weise:

-Schleife 1 -i Wasserzeichen.png

Verwenden Sie dann einen Fade-Filter, um 4 Sekunden lang einzublenden (dh 100 Frames):

fade = in: 0: 100

Und verzögern Sie es dann um 10 Sekunden, um später auf diese Weise zu starten:

Setpts = PTS-STARTPTS + 10 / TB

Ihr Befehl wird dann zu:

ffmpeg -i video.mp4 -loop 1 -i watermark.png -filter_complex \  "[1:v]fade=in:0:100[v1]; [0:v]setpts=PTS-STARTPTS[v0]; \  [v1]setpts=PTS-STARTPTS+10/TB[v3];[v0][v3]overlay=eof_action=pass[out1]" \  -map [out1] <other parameters> overlaidoutput.mp4 

Die Überlagerung wird bis zum Ende fortgesetzt. Natürlich können Sie im Bereich " Andere Parameter " auch viele Feinabstimmungsparameter verwenden .

HINWEIS: Ich habe 4 Sekunden lang 100 Frames verwendet, da ich PAL 25 fps verwendet habe. Sie können dies auf 120 Bilder ändern, wenn Sie mit 30 Bildern pro Sekunde arbeiten.


Wenn Sie die Überlagerung zu einem bestimmten Zeitpunkt beenden müssen, können Sie auch den enableParameter verwenden:

ffmpeg -i video.mp4 -loop 1 -i watermark.png -filter_complex \  "[1:v]fade=in:0:100[v1]; [0:v]setpts=PTS-STARTPTS[v0]; \  [v1]setpts=PTS-STARTPTS+10/TB[v3]; \  [v0][v3]overlay=enable='between(t,10,12)':eof_action=pass[out1]" \  -map [out1] <other parameters> overlaidoutput.mp4  

Damit ist die Überlagerung bei 12 Sekunden beendet. Stellen Sie sicher, dass Sie ffmpeg ver 2 oder höher verwenden.

Weiß jemand, warum der Ton des Eingangsfilms in der Ausgabe verloren geht? fiveDust vor 8 Jahren 0
Sieht aus, als wenn ich eof_action pass nicht benutze, hat es funktionstüchtiges Audio, aber die Codierung läuft in einer Endlosschleife. Irgendwelche Ideen? fiveDust vor 8 Jahren 0