FFMPEG: Bucle de video a la duración del audio

Por ejemplo, si el video dura 1 minuto, pero el audio dura 1 hora. Haga un bucle de video durante 1 hora de la pista de audio.

Utilizo esta solución para hacer un bucle de imagen a lo largo del audio.

ffmpeg -y -loop 1 -r 6 -i image.jpg -i audio.mp3 -shortest -c:v libx264 -preset ultrafast -tune stillimage -pix_fmt yuv420p -c:a copy output.mp4

Pero no funciona para video, reemplazar image.jpg con video.mp4 dará error no loop found.

Respuestas (2)

Para video, se debe usar la opción stream_loop.

ffmpeg -y -stream_loop -1 -i video -i audio.mp3 -fflags +shortest -max_interleave_delta 50000 -c copy output.mp4

Tendrá que usar una versión muy reciente de ffmpeg (> noviembre de 2017) ya que stream_loop tenía un error que se solucionó recientemente.

Dado que la codificación de video es costosa en términos de tiempo y CPU, he usado streamcopy. Para la mayoría de los videos, esto está bien. De lo contrario, tendrá que volver a codificar.


Editar : otro error relacionado con stream_loop, vea la solución a continuación

ffmpeg  -stream_loop -1 -i 1.mp4 -c copy -v 0 -f nut - | ffmpeg -thread_queue_size 10K -i - -i 1.mp3 -c copy -map 0:v -map 1:a -shortest -y out.mp4
Hola. Esto simplemente reduce el audio a la duración del video, quise decir lo contrario. Bucle de vídeo a lo largo de la duración del audio. Por ahora estoy usando la solución en video.stackexchange.com/questions/12905/…
Usar comando editado.
Configuré la videoparte en video.mp4, el video se reproduce hasta su duración original y se detiene mientras el audio continúa, el video solo se queda en el último cuadro.
Compartir registro completo.
pastebin.com/nEcsD7H7 incluyó MediaInfo, como puede ver, la duración del video y el audio difieren.
Ver nuevo comando al final
El primer comando creó un video sin audio de más de 44 horas de duración (de una canción de 3 minutos) antes de que me diera cuenta y lo detuviera, y el segundo comando crea un video en bucle sin audio de la duración correcta.
el primero se repite para siempre, haciendo que la duración del video sea infinita hasta que lo cancelo, el segundo no pone audio

Bueno, ahora el comportamiento predeterminado del ffmpeg actual/más reciente a través de:

c:\sbin\ffmpeg.exe -i "D:\video.m4s" -i "\audio.m4s" -c:v copy -c:a copy "D:\combined.mp4"

está rellenando/en bucle el último cuadro del video hasta audio.length=== video.length.

Vea si esto es aceptable para usted.

Para detalles de comportamiento:

  • si ( audio.length< video.length), entonces rellene el audio con silencio, de modo queaudio.length === video.length
  • if ( audio.length> v ideo.length), luego rellene el video con el último cuadro de este video, de modo queaudio.length === video.length