2012-06-07 7 views
10

Ich versuche, ein Video so zu skalieren, dass es immer 512 breit ist, wobei sich die Höhe proportional zum Originalvideo ändert. Sobald skaliert, möchte ich dann ein Wasserzeichen/Overlay auf das Video anwenden, daher wird das Video skalieren, aber das Wasserzeichen wird nicht.FFmpeg - Wie skaliert man ein Video und wendet dann ein Wasserzeichen an?

Ich bin in der Lage jede dieser separat erreichen die folgenden Filter verwenden:

Maßstab

-vf "scale=512:-1" 

Wasserzeichen

-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

Sie arbeiten erfolgreich auf eigene Faust.

Wenn ich jedoch versuche, die beiden zu kombinieren, habe ich ein bisschen Ärger.

Beide als Parameter funktioniert natürlich nicht, wie man den anderen überschreiben wird.

Ive versucht:

-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

mein Denken war, dass die Waage zum ersten Mal angewendet werden, würde dann das Wasserzeichen, aber alles, was ich bekommen, ist ein Fehler

Zu viele Eingänge für den „Film“ Filter angegeben .

Fehler beim Öffnen der Filter!

Dann ändern die, zu a; Ergebnis:

Einfacher Filtergraph 'scale = 512: -1; movie = watermark.png [Wasserzeichen]; [in] [Wasserzeichen] overlay = (main_w-overlay_w)/2: (main_h-overlay_h)/2 [out] 'hat nicht genau einen Eingang und Ausgang.

Fehler beim Öffnen der Filter!

Ich nehme an, ich muss etwas mehr mit Filterketten tun, aber ich kämpfe, um es herauszufinden.

Irgendwelche Ideen jemand?

Vielen Dank im Voraus.

+2

Nicht programmierungsbezogen - versuchen Sie http://superuser.com? –

+0

Ich denke, es ist besser zuerst das Wasserzeichen Bild skalieren und nach der Anwendung im Maßstab Video. Sie können versuchen, eine Verbindung zwischen den beiden Prozessen herzustellen. –

Antwort

14

Vielen Dank an beide @DiJuMx und @LordNeckbeard, Sie beide haben mich näher an meine Lösung gebracht. Ich habe die Option filter_complex noch nicht ausprobiert, aber es sieht sicherlich einfacher aus.

Die Lösung, die ich zur Arbeit zu finden ist:

-vf "movie=watermark.png [watermark]; [in]scale=512:trunc(ow/a/2)*2 [scale]; [scale][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

Beachten Sie, dass Ive die -1 in der Skala ersetzt wie das Potential hatte, eine ungerade Anzahl von Pixeln in der Höhe des Videos zu verursachen, wenn die Skalierung der würde dann Codierungsfehler verursachen.

16

können Sie die -filter_complex Option mit den Filtern Skala und Overlay verwenden:

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v]scale=512:-1[bg];[bg][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output 
  • scale und overlay Filter Dokumentation für weitere Informationen siehe.
  • Keine Notwendigkeit für die movie Quellfilter wie in den anderen Beispielen.
  • Sie können -c:a copy hinzufügen, wenn Sie das ursprüngliche Audio stream copy (re-mux) möchten, anstatt es neu zu codieren.Dies ist nützlich, wenn Ihre Eingabe- und Ausgabe-Containerformate identisch sind.
  • Das Beispiel platziert das Logo in der Mitte. Für andere Platzierungsoptionen:
    • Oben links mit 10 px padding: overlay=10:10
    • oben rechts mit 10 px padding: overlay=W-w-10:10
    • Unten rechts mit 10 px padding: overlay=W-w-10:H-h-10
    • Lower mit 10 Pixel Padding links: overlay=H-h-10:10
0

Von dem, was ich verstehe, könnte diese Arbeit:

-vf "movie=watermark.png [watermark]; [in] scale=512:-1,[watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

Sie wenden den Skalierungsfilter auf den Eingang "[in]" an.

Leider habe ich nicht viel Erfahrung mit den Filtern auf ffmpeg, deshalb kann ich nicht weiter helfen. Sorry