Al menos en FFmpeg 2.8.x (pero oldie también debería funcionar) puede usarlo lavfi
como formato de entrada y gráfico de filtro complejo usando movie
y setpts
filtros como argumento para la -i
opción.
Siguiente comando que hace este trabajo por ti:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Cero loop=
argumentos significa bucle infinito. Valores mayores cero establece recuentos repetidos. setpts
filtros necesarios para el ajuste de PTS para la segunda y posteriores repeticiones, de lo contrario, la mayoría de los silenciadores de salida fallará con el aumento de PTS no monótono: el bucle no recupera PTS.
Tenga en cuenta que es imposible usar filtros suponiendo que omitir cuadros sin decodificación / codificación es imposible: por diseño, los filtros solo se ocupan de cuadros decodificados.
En el FFmpeg 2.8.2 nueva opción de entrada introducida -stream_loop
. Primero veo que funciona más simple y permite copiar contenido sin transcodificar:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Pero no recalcula PTS y el archivo de salida es incorrecto. Si agrega un filtro para corregir PTS (consulte setpts
), también debe eliminarlo -c copy
. Solo los filtros de flujo de bits pueden tratar con paquetes codificados, pero no hay filtros de flujo de bits para reparar PTS (consulte: https://ffmpeg.org/ffmpeg-bitstream-filters.html )
En cualquier caso, ffmpeg en la segunda pasada falla con error:
input.mp4: Resource temporarily unavailable
Solución conocida para mí : use el contenedor para el archivo de entrada sin límites de PTS (contenedor de transmisión). Uno de ellos, conocido, es MPEG-TS. Por lo tanto, puede convertir su archivo MP4 a MPEG-TS:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
Y use el siguiente comando para componer el archivo infinito:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(los filtros de flujo de bits deben usarse solo si es necesario, en mis muestras es obligatorio)
FFmpeg> = 2.8.2 se requiere en este caso.