Ich habe eine PNG-Datei (Alpha) und eine Videodatei. Ich möchte ein Video erstellen, bei dem die erste Spur das Bild und die zweite Spur das Video ist (PNG über Video). Das Problem ist, dass die Transparenz bei PNG nicht erhalten bleibt.
Ich muss mit ffmpeg ein Wasserzeichen (PNG) in einer separaten Spur über der Videospur erstellen.
ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov
Antwort1
Die Syntax zum Hinzufügen eines Wasserzeichens ist etwas anders. Dazu benötigen Sie Videofilter, die bereits in FFmpeg enthalten sind.
Ich bin nicht sicher, ob Sie einer separaten Spur ein transparentes Wasserzeichen hinzufügen können. Der Grund dafür ist, dass das Bild selbst (der PNG-„Stream“) in eine tatsächliche Videospur umgewandelt werden muss (z. B. mit x264) – und da Video-Encoder in diesem Stadium keine Transparenz unterstützen, erhalten Sie kein transparentes Bild.
Folgendes wird in der oberen rechten Ecke hinzugefügt logo.png
. base.mov
Die Position könnt ihr mit folgenden Parametern bestimmen – in meinem Beispiel habe ich es einfach zehn Pixel vom Rand entfernt platziert:
main_w
(Hauptvideobreite)main_h
(Höhe des Hauptvideos)overlay_w
(Overlay-Videobreite)overlay_h
(Overlay-Videohöhe)
Der Filterbefehl wäre dann:
movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]
So wird daraus ein vollständiger FFmpeg-Befehl:
ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov
Die -c:v libx264 -crf 20
Parameter bestimmen den Ausgabe-Videocodec und seine Qualität (wobei CRF wahrscheinlich zwischen 19 und 24 liegen wird, je nachdem, welche Qualität Sie wünschen; niedriger ist besser).
Zu diesem Thema gibt es hier einen recht guten Blog-Beitrag:So versehen Sie ein Video mit FFmpeg mit einem Wasserzeichen. Es geht auf Positionierungsdetails ein.