Wie kann ich ein Overlay innerhalb eines ffmpeg-Filterkomplexes skalieren?

1566
d3vid

Ich möchte ein PNG- Overlay (Wasserzeichen) mit ffmpeg auf eine beliebige Videodatei anwenden . Ich möchte, dass das Video seine ursprüngliche Größe beibehält (was ich nicht im Voraus weiß), und das PNG-Format relativ zum Video skaliert wird .

Mit dem folgenden Befehl wird die Überlagerung beispielsweise oben links platziert:

ffmpeg.exe -i input.mov -i header.png -filter_complex \ "[0][1] overlay=0:0" output.mkv 

Der folgende Befehl skaliert die Überlagerung relativ zu sich selbst (1/5 der Breite, relative Höhe).

ffmpeg.exe -i input.mov -i header.png -filter_complex \ "[1] scale=iw/5:-1 [scaled]; \ [0][scaled] overlay=0:0" output.mkv 

Wie kann ich das Overlay 1/5 der Breite von machen input.mov? (Ist es beispielsweise möglich, die Breite einer anderen Filterklausel zu speichern und / oder abzufragen?)

Die engste Frage, die mir begegnet ist, ist die Skalierung des Wasserzeichens nach Videogröße mit ffmpeg. Diese Antwort verwendet jedoch externe Linux / Cygwin-Befehle. Das FFmpeg-Wasserzeichen war auch hilfreich, wenn ich ffmpeg herausgefunden hatte. Ich bin jedoch unter Windows und rufe ffmpeg über Python auf. Daher möchte ich das alles innerhalb der Klausel filter_complex tun. Wenn das nicht möglich ist, würde ich es gerne wissen, damit ich aufhören kann zu versuchen :)

2

1 Antwort auf die Frage

3
Chamath

Mein Ansatz wäre zwei getrennte Befehle, einen zum Berechnen der Abmessungen und einen zum Überlagern. Sie können einfach verwenden, FFprobewas mit kommt FFmpeg. Zur Berechnung der Abmessungen können Sie den folgenden Befehl verwenden.

ffprobe -v error -show_entries stream=width,height -of default=noprint_wrappers=1 input_video 

Dies wird wie folgt aussehen.

Breite = 1280

Höhe = 720

Danach können Sie die Mathematik nach Ihren Wünschen ausführen und auf Ihren Overlay-Befehl anwenden. Auch hier sind einige weitere Möglichkeiten für die Skalierung.

Hoffe das hilft!