2

If the Matroska format is used, in certain framerates it doesn't record at exact input framerate, but rather at a little higher than the input framerate.

As an example:

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

doesn't generate a recording at 30fps, but rather at 30.0003fps.

This is not good, because even a slight change in input framerate can cause major frame stutter. Unless ffmpeg is speeding up the stream by 1.00001x, which I don't think so when using x11grab.

To prove this, VLC can be used for checking the frame rate.

Is there any way to force exactly 30fps, or is this a format flaw?

Also, 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
  • How does "major frame stutter" manifest itself? I can imagine sync issues but I can't quite picture how anything major could come from a 1 part per 10000 rate error. – Jim Mack May 12 '16 at 0:12
  • Please show the complete console output from your ffmpeg command. – llogan May 12 '16 at 16:38
  • I just noticed this only happens on .mkv format. I'm updating information about this. Here's the paste: pastebin.com/yUbn1zrL – tildearrow May 13 '16 at 0:53
  • 1
    For recording to MKV, insert -vsync 0. Whatever rate the source supplies, MKV will encode the same timings. – Gyan May 13 '16 at 7:08
3

MKV does not store a frame rate in its container. So ffmpeg/vlc looks at the default duration of a frame instead. It sees 33.333ms and does the math, which is where your weird number comes from.

For more information, see: https://gitlab.com/mbunkus/mkvtoolnix/wikis/Wrong-frame-rate-displayed

To test this out, you can run ffprobe with -show_frames. I think you'll find the presentation times for each frame are spot on.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.