ffprobe 读取错误的帧速率,除了 MediaInfo 之外还有其他解决方法吗?

ffprobe 读取错误的帧速率,除了 MediaInfo 之外还有其他解决方法吗?

我想检查多个视频的帧速率,使其翻倍。我使用ffprobegetr_frame_rate将其求值到小数,然后将其输入ffmpeg为 rscale -r {2*fps},或输入mkvmerge0:{2*fps}fps

因此,我首先要说的是:

ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate faulty.mkv

500/21

这不可能,500/21 是什么样的 fps?结果保存时500/21音频不同步,这种情况不会发生24000/1001。这个值是确实错误的。

至少 ffprobe 4 读取正确的编解码器时间尺度,即23.98 tbc (default):( ffprobe faulty.mkv版本 4.3.5-0+deb11u1+rpt3)

Stream #0:0: Video: (...), 23.81 fps, 23.81 tbr, 1k tbn, 23.98 tbc (default)

但在后来的版本中tbc已被弃用:

Stream #0:0: Video: (...), 23.81 fps, 23.81 tbr, 1k tbn (default)

然而,MediaInfo 却做对了:

mediainfo faulty.mkv=

(...)
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
(...)

我尝试用流的除以-count_packets文件的,结果得到了每小时 1 秒的误差。这比 23,8095 要好得多,但数据包不是帧。只有慢得令人无法忍受的才能得到准确的值。nb_read_packetsduration-count_frames

我的工作流程ffprobe以某种方式使用,因此mediainfo出于性能原因,我不愿意总是运行在它之上。我知道文件是有问题的,但如果mediainfo可以做到,有没有办法确保以正确的帧速率读取,ffprobe而不需要像看起来那样解码整个文件-count_frames

相关内容