ffmpeg は回転した画像をビデオにオーバーレイしますが、回転した画像で覆われていない出力領域を透明にするにはどうすればよいですか?

ffmpeg は回転した画像をビデオにオーバーレイしますが、回転した画像で覆われていない出力領域を透明にするにはどうすればよいですか?

を使ってffmpeg動画に画像を重ねています。 必要なのは、画像を任意の角度で回転させることです。 を使うとfilter_complex、回転した画像を重ねることができます。ただし、画像の出力領域は黒く塗りつぶされ、透明ではありません。ドキュメント塗りつぶしの色を指​​定できると書かれています。これ、しかし、失敗しました。何かアイデアはありますか?

ここにコマンドラインをコピーします:

./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

答え1

覆われていない領域を透明で塗りつぶすには、次のオプションを使用します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

を参照してくださいrotateフィルターヘルプ:

fillcolorc

回転した画像で覆われていない出力領域を塗りつぶすために使用する色を設定します。このオプションの一般的な構文については、ffmpeg-utils マニュアルの (ffmpeg-utils)「色」セクションを確認してください。特別な値「なし」を選択した場合、背景は印刷されません (背景が表示されない場合などに便利です)。

デフォルト値は「黒」です。

関連情報