ffmpeg überlagert gedrehte Bilder auf ein Video. Wie kann der Ausgabebereich, der nicht vom gedrehten Bild abgedeckt ist, transparent gemacht werden?

ffmpeg überlagert gedrehte Bilder auf ein Video. Wie kann der Ausgabebereich, der nicht vom gedrehten Bild abgedeckt ist, transparent gemacht werden?

Ich verwende ffmpegum ein Bild über einen Film zu legen. Die Anforderung ist, das Bild um einen beliebigen Winkel zu drehen. Mit filter_complexkann ich nun das gedrehte Bild überlagern. Allerdings ist der Ausgabebereich des Bildes schwarz ausgefüllt und nicht transparent. Ich habe dasDokumente, heißt es, kann die Füllfarbe angeben, nachDas, aber das ist mir nicht gelungen. Irgendwelche Ideen?

Ich kopiere meine Befehlszeile hier:

./ffmpeg -i mersyvideo.mp4 -i avatar.jpg -filter_complex "[1:v] rotate=-30*PI/180:c=black@'0x00':ow=rotw(iw):oh=roth(ih) [rotate];[0:v][rotate] overlay=40:10" -codec:a copy output/overlayavatar.mp4

Antwort1

Um die nicht abgedeckten Bereiche transparent zu füllen, verwenden Sie die Option c=none:

ffmpeg \
  -i mersyvideo.mp4 \
  -i avatar.jpg \
  -filter_complex "
  [1:v]rotate=-30*PI/180:c=none:ow=rotw(iw):oh=roth(ih)[rotate];
  [0:v][rotate]overlay=40:10
  " \
  -codec:a copy \
  output/overlayavatar.mp4

Sehen Sie sich dierotateFilterhilfe:

fillcolor,c

Legen Sie die Farbe fest, mit der der Ausgabebereich gefüllt wird, der nicht vom gedrehten Bild abgedeckt wird. Die allgemeine Syntax dieser Option finden Sie im Abschnitt „Farbe“ (ffmpeg-utils) im Handbuch zu ffmpeg-utils. Wenn der spezielle Wert „keine“ ausgewählt ist, wird kein Hintergrund gedruckt (nützlich, wenn der Hintergrund beispielsweise nie angezeigt wird).

Der Standardwert ist „schwarz“.

verwandte Informationen