ffmpeg: superposición de video girado con transparencia

Soy nuevo en ffmpeg (codificación de video en general).

Tengo dos videos uno más grande que el otro. Quiero rotar, cambiar el tamaño y superponer el video más corto sobre el más grande en las coordenadas definidas.

Hasta ahora, estoy haciendo esto:

  1. Agregue el canal alfa a ambos videos:ffmpeg -i demo.mov -vcodec qtrle -pix_fmt argb demo.mov
  2. Defina el desvanecimiento, el desvanecimiento, la escala, la superposición, la perspectiva y la rotación y luego emita el video:ffmpeg -y -i demo.mov -i demo2.mov -filter_complex "[1:v] fade=in:10:1:alpha=1, fade=out:500:1:alpha=1, scale=80:80, perspective=x0=0:y0=0:x1=W:y1=40, rotate=-0.1745:c=none [ov]; [0:v][ov] overlay=100:100 [v]" -map "[v]" out.mov

En este proceso, me enfrento a algunos problemas:

  1. ¿Estoy agregando canales alfa de la manera correcta?
  2. La salida final tiene un fondo parpadeante en el lugar donde el video rotado tiene márgenes.
  3. La superposición sigue siendo un cuadrado. No quiero que sea cuadrado, sino de la dimensión especificada por perspectivefiltro.

Algunos de los parámetros de los comandos anteriores (como perspective, fade) son arbitrarios.

Para dar una mejor perspectiva de lo que estoy tratando de hacer: intento agregar un video como si se estuviera reproduciendo en un teléfono que se está moviendo.

Pregunté sobre problemas en IRC y llegué hasta aquí. No sé cómo proceder desde aquí.

Aquí está la salida: https://youtu.be/yd4UWq5NO5M

Cualquier ayuda sería genial.

¿Puedes subir las entradas sin procesar?
@Mulvya Claro. download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/… Estoy usando la misma fuente para ambos: fondo y superposición para mayor comodidad.
Agregué canal alfa en esta entrada.
Veré más de cerca más tarde, pero no hay canal alfa. El formato de píxeles es yuv420p. Eso sí, no necesita un canal alfa para lo que está tratando de hacer. En cualquier caso, ¿con qué se llenaría el canal alfa?
Además, dado que está "intentando agregar un video como si se estuviera reproduciendo en un teléfono que se está moviendo", es mejor hacerlo en una aplicación de composición con un rastreador. Mire en Natron - natron.fr o Fusion - blackmagicdesign.com/in/products/fusion si está buscando una solución gratuita. más After Effects.
Por qué agrego el canal alfa: cuando traté de superponer el video sin el canal alfa, quedó un fondo negro cuando lo desvanecí. Agregar canal alfa lo eliminó. Entonces, estoy agregando el canal para que no queden restos de la superposición cuando desaparezca. Necesito integrar esta funcionalidad en mi aplicación, por lo que es mejor no usar soluciones de terceros :)
No hay necesidad de canal alfa. Tu último filtro debería ser [0:v][ov] overlay=100:100:eof_action=pass [v]
¡Sí! ¡Eso funciono! Ahora no tengo que preocuparme por videos intermedios de gran tamaño. ¡Gracias! Sin embargo, el problema del parpadeo sigue ahí.
Lo extraño es que el parpadeo desaparece casi por completo si realizo la tarea en dos comandos, es decir, un comando ffmpeg para generar un MOV con el video transformado con los fundidos y un comando para realizar la superposición de ese MOV sobre el original. Pero la cadena de filtros idéntica para el primer paso cuando se integra en un solo comando, parpadea.
He probado varios videos. Todos han estado dando el parpadeo. Sin embargo, no he intentado separar las cadenas de filtros.
Prueba esto para el primer comando: ffmpeg -y -i "input.mov" -vf "format=bgra, outlook=x0=0:y0=0:x1=W:y1=180, fade=in:10:1: alfa=1, desvanecimiento=salida:200:1:alfa=1, escala=-1:80, rotación=-0.1745:c=ninguno:ow=rotw(iw):oh=roth(ih)" -c:v salida qtrle.mov
Y 2º: ffmpeg -y -i "input.mov" -i "output.mov" -filter_complex "[0:v][1:v] overlay=100:100:eof_action=pass [v]" -map "[ v]" salida_final.mov
Parpadeando mucho. Aquí: youtu.be/ZzLBVRGfn60
Déjame comprobar aquí de nuevo.

Respuestas (1)

Dividir el proceso en dos pasos funcionó para mí.

Vea mi salida usando los comandos a continuación en http://sendvid.com/g56xjz04

Los comandos que usé:

ffmpeg -y -i "video for overlay.mov" -vf "format=bgra, perspective=x0=0:y0=0:x1=W:y1=180, fade=in:10:1:alpha=1, fade=out:200:1:alpha=1, scale=-1:80, rotate=-0.1745:c=none:ow=rotw(-0.1745):oh=roth(-0.1745)" -c:v qtrle overlay.mov

ffmpeg -y -i "base.mov" -i "overlay.mov" -filter_complex "[0:v][1:v] overlay=100:100:eof_action=pass [v]" -map "[v]" final_out.mov

Sospecho que en la cadena de filtros compleja de comando único, hay algún error o matiz con respecto a las operaciones del canal alfa que está generando un canal alfa distorsionado.

Si necesita un solo comando, creo que la mejor manera de avanzar es enviar un informe de error al equipo de ffmpeg, incluidos los comandos y la salida del comando único y el proceso de dos pasos.

Además, asegúrese de estar usando la versión más reciente o bastante reciente de ffmpeg.
Acabo de probar los dos comandos con estas versiones: N-76452-ga97f1e7y N-76045-g97be5d4. ¿Puedes decirme qué versión estás usando? Porque todavía estoy recibiendo el parpadeo.
Tengo la compilación estática N-75573-g1d0487f de 64 bits del 29/09/2015, tomada de este sitio: ffmpeg.zeranoe.com/builds
Por los números, parece que el mío es más nuevo.
¿Lo compilaste tú mismo?
Compilé N-76452-ga97f1e7y agregué N-76045-g97be5d4desde aquí: launchpad.net/~mc3man/+archive/ubuntu/trusty-media
Pruebe la última versión de la fuente original: ffmpeg.org/download.html
¿Debo optar por 2.8.1 (tar descargable) o extraer de git? Oh, acabo de compilar 2.8.1 y diceNo such filter: 'perspective'
@DhavanVaidya Siempre use git, no suelte.
@LordNeckbeard Está bien. Lo haré y publicaré lo que sucede.