【问题标题】:FFprobe, how to get frame rate of animated gif as a decimal in JSON formatFFprobe,如何将动画 gif 的帧速率作为 JSON 格式的小数
【发布时间】:2017-03-17 22:51:22
【问题描述】:

当我对动画 gif 使用 ffprobe 时,除其他外,我得到:

> ffprobe.exe  foo.gif
. . . 
Stream #0:0: Video: gif, bgra, 500x372, 6.67 fps, 6.67 tbr, 100 tbn, 100 tbc

太棒了;这告诉我帧速率是每秒 6.67 帧。但我将在程序中使用它并希望它以解析的格式。 ffprobe 做 json,但是当我使用它时:

> ffprobe.exe -show_streams -of json foo.gif

json显示:

"r_frame_rate": "20/3",
"avg_frame_rate": "20/3",

但我想要十进制形式 6.67 而不是 20/3。有没有办法让 FFProbe 以十进制生成其 JSON 输出?我似乎在文档中找不到它。

我的平台是 Windows; FFProbe 版本为 N-68482-g92a596f。

我确实考虑过使用 ImageMagick,但有问题的 GIF 文件已损坏(我正在开发一个简单的修复程序); IM 的“识别”命令停止,而 FFMpeg 和 FFProbe 处理得很好。

补充:现在这有点学术;我刚刚使用(在 Python 中):

framerate_as_decimal = "%4.2f" % (float(fractions.Fraction(framerate_as_fraction)))

但我还是有点好奇是否有答案。

【问题讨论】:

    标签: json ffmpeg animated-gif frame-rate ffprobe


    【解决方案1】:

    我知道这是一个有点老的问题,但今天我尝试做同样的事情并找到了两个选项:

    1. 您可以在python和mediainfo中使用子进程模块:fps = float(subprocess.check_output('mediainfo --Inform="Video;%FrameRate%" input.mp4, shell=True))这里返回的值是一个字符串,这就是我将它转换为float的原因。不幸的是,没有shell=True,我无法执行相同的操作,但也许我遗漏了一些东西。
    2. 使用 ffprobe:ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4 这里的问题是输出是 50/1 或者在你的情况下是 20/3 所以你需要用“/”分割输出然后转换和分割列表的两个元素.比如:

    fps = subprocess.check_output(['ffprobe', '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=avg_frame_rate', '-of', 'default=noprint_wrappers=1:nokey=1', 'input.mp4']) fps_lst = fps.split('/') fps_real = float(fps_lst[0]) / int(fps_lst[1])

    所以获取帧率的正常命令是: ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4mediainfo --Inform="Video;%FrameRate%" input.mp4

    【讨论】:

      【解决方案2】:

      在 Python 中,您可以使用:

      frame_rate_str = "15/3"
      frame_rate = eval(frame_rate_str)
      

      【讨论】:

      • 相对于eval(),通常有更好的方法来做事。例如,int('61')eval('61') 更快、更安全
      猜你喜欢
      • 2015-01-04
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2017-04-07
      相关资源
      最近更新 更多