
Ich versuche, den folgenden Befehl auszuführen, der dem Video ein Wasserzeichen hinzufügen und es auch hochskalieren soll.
ffmpeg -i "in.avi" -i "\logo.png" -vf scale=854:-1 -preset
veryfast -crf 20 -filter_complex overlay=5:5 "ou.mkv"
Ich erhalte die folgende Fehlermeldung.
Filtergraph 'scale=854:-1' was specified through the
-vf/-af/-filter option for output stream 0:0, which is fed from
a complex filtergraph. -vf/-af/-filter and -filter_complex
cannot be used together for the same stream.
Bevor ich versucht habe, hochzuskalieren (ohne -vf scale=854:-1), hat die Eingabeaufforderung zum Wasserzeichen funktioniert.
Wie kann ich beides erreichen?
Was ich versucht habe?
- Verschieben des Parameters -vf vor die Eingabe, nach die Eingabe usw.
Antwort1
Sie können einen verwendenFiltergraphum alle Filter durchzuführen:
ffmpeg -i input.avi -i logo.png -filter_complex \
"[0:v]scale=854:-2[scaled]; \
[scaled][1:v]overlay=5:5[out]" \
-map "[out]" -map 0:a -c:v libx264 -c:a copy output.mkv
[0:v]
bezieht sich auf den/die Videostream(s) des ersten Eingangs (input.avi
in diesem Beispiel).[1:v]
ist das Video vom zweiten Eingang (logo.png
in diesem Beispiel).Audio istSteam kopiertin diesem Beispiel anstatt neu codiert zu werden; vorausgesetzt, Ihr erster Eingang hat Audio.
Es empfiehlt sich, die Filterein- und -ausgänge wie in diesem Beispiel manuell zu benennen, statt sich auf Standardwerte zu verlassen, die zu falschen Stream-Auswahlen führen können.
-2
imVideofilter skalierenwird anstelle von verwendet,-1
da x264 erfordert, dass die Ausgabe durch 2 teilbar ist, wenn auf 4:2:0-Chroma-Subsampling ausgegeben wird:
Wenn einer der Werte -n mit n > 1 ist, verwendet der Skalierungsfilter ebenfalls einen Wert, der das aus der anderen angegebenen Dimension berechnete Seitenverhältnis des Eingabebildes beibehält. Danach stellt er jedoch sicher, dass die berechnete Dimension durch n teilbar ist und passt den Wert bei Bedarf an.