Estoy tratando de superponer un video encima de una imagen. El problema al que me enfrento es que la duración del video que quiero es más larga que la duración del video de entrada.
Para resolver este problema, trato de generar un bucle de transmisión y codificar la duración que quiero usando el parámetro "t".
Estoy usando el filtro setpts para asegurarme de que mi formato de contenedor (.mp4) acepte marcos pasados reescribiendo sus marcas de tiempo:
ffmpeg -loop 1 -i image.jpg -stream_loop -1 -i video.mov -filter_complex "[1:v]setpts=N/(FRAME_RATE*TB)[1v];[0:v][1v]overlay=x=main_w*0.44:y=main_h*0.33[out]" -map [out] -t 00:00:15 out.mp4
Entonces el comando dice lo siguiente:
Cada fotograma pasará por el filtro:
Esto debería continuar hasta que se cree un archivo con 00:00:15 segundos.
Este comando genera ese archivo pero el video.mov no está en bucle, una vez que el primer bucle finaliza, el último cuadro se repite hasta que finaliza la película de salida.
FYI: Hice un par de pruebas más:
ffmpeg -stream_loop -1 -i movie.mov -filter_complex "[0:v]setpts=N/(FRAME_RATE*TB)[out]" -map [out] -t 00:00:30 output.mp4
Esto funciona bien, genera una película con una duración de 30 segundos con la película de entrada en bucle para llenar la película de salida
por otro lado, si agrego un archivo de entrada más:
ffmpeg -stream_loop -1 -i movie.mov -loop 1 -i image.jpg -filter_complex "[0:v]setpts=N/(FRAME_RATE*TB)[out]" -map [out] -t 00:00:30 output.mp4
Esto no creará una película con 30 segundos, aunque una de las entradas nunca se usa, ffmpeg crea un archivo de película con solo un bucle de movie.mov y la misma duración de movie.mov.
¿Algún consejo por favor?
¡Muchos gracias!
Ze
Prueba con el filtro de película en su lugar
ffmpeg -loop 1 -i image.jpg -filter_complex \
"movie=video.mov:loop=999,setpts=N/(FRAME_RATE*TB)[1v]; \
[0:v][1v]overlay=x=main_w*0.44:y=main_h*0.33[out]" \
-map [out] -t 00:00:15 out.mp4
usuario361526
gian