如何判断视频是否具有可变帧速率?

Nat*_*les 5 video vlc-media-player ffmpeg video-editing

如何判断视频是否具有可变帧速率?我不需要能够以编程方式完成,我只是不想安装一些数百兆字节的程序;例如,如果我能用 VLC 媒体播放器做到这一点,那就完美了。

Gya*_*yan 8

为此,FFmpeg 有一个 vfrdet 过滤器。

ffmpeg -i in -vf vfrdet -an -f null -
Run Code Online (Sandbox Code Playgroud)

在日志中,您将看到表格的读数,

[Parsed_vfrdet_0 @ 0000000003d8fec0] VFR:0.833333 (50/10) min: 23 max: 291)
Run Code Online (Sandbox Code Playgroud)

VFR 的非零值表示 vfr 流。括号中的第一个值是持续时间不同于检测到的流的帧速率所暗示的预期持续时间的帧数。第二个值是具有预期持续时间的帧数。VFR 值是第一个数字与两者之和的比率。

几个警告:非常低或非常高的值表示有一些非标准持续时间的错误帧,通常是第一帧和/或最后一帧。在大多数情况下,这些可以被视为 CFR。大约 0.50 的值表示流具有帧速率和/或时基,其名义帧持续时间无法在流的时基中准确表达,因此生成文件的应用程序会振荡持续时间,例如,如果流的 fps 为 6和 1/100 的时基,那么理想的时间戳将是 0, 16.667, 33.334, 50.000, 66.667, 83.333, 100.000 对于视频的第一秒,但时间戳是整数,因此复用器可以存储 0, 34,16 50、67、83、100。这可能显示为 VFR 值为 0.5 的流


小智 5

只需使用 ffprobe

ffprobe -v quiet -print_format json -show_streams input
Run Code Online (Sandbox Code Playgroud)

并检查avg_frame_rate所需视频流的参数。如果这个参数的值是这样的分数

"avg_frame_rate": "1205285219/50270287"
Run Code Online (Sandbox Code Playgroud)

如果分母不为 1,则视频文件具有可变帧速率。

如果值是这样的

"avg_frame_rate": "25/1"
Run Code Online (Sandbox Code Playgroud)

确保流具有恒定的帧速率。