[FFmpeg-user] converting raw video in mkv to y4m looses framerate.

Moritz Barsnick barsnick at gmx.net
Mon Jul 27 16:47:41 CEST 2015


On Mon, Jul 27, 2015 at 15:19:01 +0100, Andy Furniss wrote:
> The overhead is a bit high! but the framerate looks good.

:-)

> Anyway players will play the vid but think it's 1000 fps ffmpeg -i below.

I tried to reproduce, and noticed that indeed the y4m header (very easy
to read, check here: http://wiki.multimedia.cx/index.php?title=YUV4MPEG2)
says 1000 fps.

If I run ffmpeg with "-r 60" as an output option, the framerate is
recorded correctly in the y4m header, see this text diff of the two
output files, which are otherwise identical:

+YUV4MPEG2 W3840 H2160 F1000:1 Ip A1:1 C420jpeg XYSCSS=420JPEG
-YUV4MPEG2 W3840 H2160 F60:1 Ip A1:1 C420jpeg XYSCSS=420JPEG

So, that's your workaround.

If I dare to stab at the root cause of the problem: It might be this
code in libavformat/yuv4mpegenc.c, in yuv4_generate_header():

    // TODO: should be avg_frame_rate
    av_reduce(&raten, &rated, st->time_base.den,
              st->time_base.num, (1UL << 31) - 1);

It shows that the time base of the input stream "st" is being used, and
not the frame rate. (av_reduce() creates numerator and denominator, to
be able to create the quoted string "F1000:1".) And the time base of
the input is indeed "1k", as seen in your logs. This may be a bug, and
the "TODO" may have something to do (excuse the pun) with that.

Moritz


More information about the ffmpeg-user mailing list