La velocidad de fotogramas del formato Matroska no es precisa con ciertos valores

Si se usa el formato Matroska, en ciertas velocidades de fotogramas no se graba a la velocidad de fotogramas de entrada exacta, sino a un poco más alta que la velocidad de fotogramas de entrada.

Como ejemplo:

ffmpeg -video_size 1920x1080 -f x11grab -framerate 30 -i :0.0 -c:v libx264rgb -crf 0 -preset ultrafast video.mkv

no genera una grabación a 30fps, sino a 30.0003fps.

Esto no es bueno, porque incluso un ligero cambio en la velocidad de fotogramas de entrada puede causar un gran tartamudeo de fotogramas. A menos que ffmpeg esté acelerando la transmisión en 1.00001x, lo cual no creo cuando uso x11grab.

Para probar esto, se puede usar VLC para verificar la velocidad de fotogramas.

¿Hay alguna forma de forzar exactamente 30 fps, o se trata de una falla de formato?

También, uname -a:

Linux linux 4.1.15-rt17-1-rt-fixedtimers #1 SMP PREEMPT RT Sat Jan 16 01:14:52 GMT+5 2016 x86_64 GNU/Linux
¿Cómo se manifiesta el "tartamudeo de fotogramas importantes"? Puedo imaginar problemas de sincronización, pero no puedo imaginar cómo algo importante podría provenir de un error de tasa de 1 parte por 10000.
Muestre la salida completa de la consola desde su ffmpegcomando.
Acabo de notar que esto solo sucede en formato .mkv. Estoy actualizando información sobre esto. Aquí está la pasta: pastebin.com/yUbn1zrL
Para grabar en MKV, inserte -vsync 0. Cualquiera que sea la velocidad que suministre la fuente, MKV codificará los mismos tiempos.

Respuestas (1)

MKV no almacena una velocidad de fotogramas en su contenedor. Por lo tanto, ffmpeg/vlc analiza la duración predeterminada de un cuadro. Ve 33.333 ms y hace los cálculos, que es de donde proviene su número extraño.

Para obtener más información, consulte: https://gitlab.com/mbunkus/mkvtoolnix/wikis/Wrong-frame-rate-displayed

Para probar esto, puede ejecutar ffprobecon -show_frames. Creo que encontrará que los tiempos de presentación para cada cuadro son perfectos.