Eu estava recebendo milhares desses avisos com uma codificação específica. Eu estava diminuindo o tamanho do vídeo 1080p para 480p. Em um ponto de edição, onde havia algum vídeo desonesto devido a um defeito no disco a laser de origem, essas mensagens começaram a aparecer e apareceram, penso eu, para todos os quadros subsequentes. Eles continuaram, como este pequeno trecho:
Past duration 0.901115 too large= 535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 31 times
Past duration 0.901115 too large= 535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 34 times
Past duration 0.901115 too large= 535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 36 times
Past duration 0.901115 too large= 535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 39 times
A invocação ffmpeg original era a seguinte:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Seguindo as sugestões aqui, adicionei -framerate 60000/1001 à entrada. Isso não melhorou nada. Mantive -framerate e adicionei -r 60000/1001 à saída. Isso ainda não melhorou nada. Mantendo os dois, finalmente adicionei -async 1 -vsync 1. Isso resultou no recebimento de um único aviso, e é tudo. Essa invocação foi:
ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -r 60000/1001 -async 1 -vsync 1
A única diferença que encontrei em um despejo detalhado do MediaInfo foi a remoção dessa linha encontrada na invocação original, mas não na segunda:
Delay relative to video : -33ms
No entanto, verifiquei a sincronização A / V perto do início dos arquivos e perto do final, e não havia diferença discernível na sincronização entre os dois arquivos. Os tempos de execução também eram os mesmos, mas isso foi medido apenas no segundo mais próximo, no VLC. Então eu verifiquei a contagem de quadros usando ffmpeg da seguinte forma:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
e procurando "frame = #" próximo ao final da saída.
Acontece que o vídeo de origem tinha 375226 quadros, a invocação original rendeu 375195 quadros e a segunda invocação rendeu 375200. Portanto, a segunda invocação, com muito menos mensagens de aviso, também caiu 5 menos quadros.
Os testes subsequentes mostraram que -framerate e -r eram desnecessários, e apenas o uso dos dois sinalizadores de sincronização era suficiente. Isso produziu resultados idênticos à segunda invocação acima, portanto, a terceira e mais simples descoberta que resolvi para resolver o problema é a seguinte:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
E ainda outro arquivo posteriormente produziu um monte desses avisos, mesmo com os sinalizadores de sincronização, mas a adição dos sinalizadores de taxa "o corrigiu" (apenas dois em vez de milhares de avisos). Às vezes, a segunda invocação funciona quando a terceira não. Para meus propósitos imediatos, vou me contentar com a segunda invocação e espero que ela resolva a maioria desses problemas.
Isso foi tudo com o ffmpeg versão 4.0.