Estaba recibiendo miles de estas advertencias con una codificación particular. Estaba reduciendo el tamaño del video de 1080p a 480p. En un punto de edición, donde había un video dudoso debido a un defecto en el disco láser de origen, estos mensajes comenzaron a aparecer y luego aparecieron, creo, para cada cuadro a partir de entonces. Siguieron y siguieron, como este breve extracto:
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
La invocación original de ffmpeg fue esta:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Siguiendo las sugerencias aquí, primero agregué -framerate 60000/1001 a la entrada. Eso no mejoró nada. Retuve -framerate y agregué -r 60000/1001 a la salida. Eso todavía no mejoró nada. Reteniendo ambos, finalmente agregué -async 1 -vsync 1. Esto resultó en que recibí una sola advertencia, y eso es todo. Esa invocación fue:
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
La única diferencia que encontré en un volcado detallado de MediaInfo fue la eliminación de esta línea encontrada en la invocación original pero no en la segunda:
Delay relative to video : -33ms
Sin embargo, verifiqué la sincronización de A / V cerca del comienzo de los archivos y cerca del final, y no hubo diferencias apreciables en la sincronización entre los dos archivos. Sus tiempos de ejecución también fueron los mismos, pero eso solo se midió al segundo más cercano, en VLC. Así que verifiqué los recuentos de cuadros usando ffmpeg así:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
y buscando "frame = #" cerca del final de la salida.
Resulta que el video fuente tenía 375226 cuadros de largo, la invocación original produjo 375195 cuadros, y la segunda invocación produjo 375200. Entonces, la segunda invocación, con muchos menos mensajes de advertencia, también dejó caer 5 cuadros menos.
Las pruebas posteriores mostraron que -framerate y -r eran innecesarios, y solo usar los dos indicadores de sincronización era suficiente. Esto produjo resultados idénticos a la segunda invocación anterior, por lo que la tercera y más simple invocación que encontré para resolver el problema es esta:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
Y otro archivo posteriormente produjo un montón de estas advertencias incluso con los indicadores de sincronización, pero al agregar nuevamente los indicadores de velocidad "lo arregló" (solo produjo dos en lugar de miles de advertencias). Entonces, a veces la segunda invocación funciona cuando la tercera no. Para mis propósitos inmediatos, me voy a conformar con la segunda invocación y espero que solucione la mayoría de estos problemas.
Todo esto con la versión 4.0 de ffmpeg.