ffmpeg sobrepõe imagens giradas em um vídeo, como tornar transparente a área de saída não coberta pela imagem girada?

ffmpeg sobrepõe imagens giradas em um vídeo, como tornar transparente a área de saída não coberta pela imagem girada?

Estou usando ffmpegpara sobrepor uma imagem em um filme. O requisito é girar a imagem em um ângulo arbitrário. Usando filter_complex, posso sobrepor a imagem girada agora. No entanto, a área de saída da imagem é preenchida em preto e não transparente. Eu verifiquei odocumentos, diz que pode especificar a cor de preenchimento, de acordo comesse, mas não consegui fazê-lo. Alguma ideia?

Copio minha linha de comando aqui:

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

Responder1

Para preencher as áreas não cobertas com transparente, utilize a opção 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

Veja orotateajuda do filtro:

fillcolor,c

Defina a cor usada para preencher a área de saída não coberta pela imagem girada. Para a sintaxe geral desta opção, verifique a seção (ffmpeg-utils)"Color" no manual do ffmpeg-utils. Se o valor especial "nenhum" for selecionado, nenhum fundo será impresso (útil, por exemplo, se o fundo nunca for mostrado).

O valor padrão é "preto".

informação relacionada