Pelo menos no FFmpeg 2.8.x (mas o oldie também deve funcionar), você pode usar lavfi
como formato de entrada e gráfico de filtro complexo usando movie
e setpts
filtros como argumento para a -i
opção.
Próximo comando fazendo este trabalho para você:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Zero loop=
argumentos significa loop infinito. Valores maiores que conjuntos de zero repetem contagens. setpts
filtros necessários para o ajuste do PTS para repetições posteriores e posteriores; caso contrário, a maioria dos muxers de saída falhará com o aumento do PTS não monotônico: o loop não recalca o PTS.
Observe que o uso de filtros assumindo que ignorar quadros sem decodificação / codificação é impossível: por design, os filtros lidam apenas com quadros decodificados.
No FFmpeg 2.8.2, nova opção de entrada foi -stream_loop
introduzida. Primeiro, parece que funciona mais simples e permite copiar conteúdo sem transcodificar:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
Mas ele não recalcula o PTS e o arquivo de saída está errado. Se você adicionar um filtro para corrigir o PTS (consulte setpts
), deverá remover -c copy
também. Somente filtros de fluxo de bits podem lidar com pacotes codificados, mas não há nenhum filtro de fluxo de bits para corrigir o PTS (consulte: https://ffmpeg.org/ffmpeg-bitstream-filters.html )
Em qualquer caso, o ffmpeg na segunda passagem falha com erro:
input.mp4: Resource temporarily unavailable
Solução conhecida para mim : use o contêiner para o arquivo de entrada sem limites de PTS (contêiner de streaming). Um deles, me conhece, é o MPEG-TS. Então, você pode simplesmente converter seu arquivo MP4 para o MPEG-TS:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
E use o próximo comando para compor o arquivo infinito:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(filtros de fluxo de bits devem ser usados apenas se necessário, nas minhas amostras é necessário)
FFmpeg> = 2.8.2 é necessário neste caso.