ffmpeg superpone imágenes rotadas en un video, ¿cómo hacer transparente el área de salida que no está cubierta por la imagen rotada?

ffmpeg superpone imágenes rotadas en un video, ¿cómo hacer transparente el área de salida que no está cubierta por la imagen rotada?

Lo estoy usando ffmpegpara superponer una imagen en una película. El requisito es rotar la imagen en un ángulo arbitrario. Usando filter_complex, ahora puedo superponer la imagen girada. Sin embargo, el área de salida de la imagen está rellena de negro y no es transparente. revisé eldocumentos, dice que puede especificar el color de relleno, segúneste, pero no lo hice. ¿Algunas ideas?

Copio mi línea de comando aquí:

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

Respuesta1

Para rellenar las áreas no cubiertas con transparente, utilice la opción 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

Ver elrotatefiltrar ayuda:

fillcolor,c

Establezca el color utilizado para rellenar el área de salida no cubierta por la imagen girada. Para conocer la sintaxis general de esta opción, consulte la sección (ffmpeg-utils)"Color" en el manual de ffmpeg-utils. Si se selecciona el valor especial "ninguno", entonces no se imprime ningún fondo (útil, por ejemplo, si el fondo nunca se muestra).

El valor predeterminado es "negro".

información relacionada