我想检查多个视频的帧速率,使其翻倍。我使用ffprobe
getr_frame_rate
将其求值到小数,然后将其输入ffmpeg
为 rscale -r {2*fps}
,或输入mkvmerge
为0:{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_packets
duration
-count_frames
我的工作流程有ffprobe
以某种方式使用,因此mediainfo
出于性能原因,我不愿意总是运行在它之上。我知道文件是有问题的,但如果mediainfo
可以做到,有没有办法确保以正确的帧速率读取,ffprobe
而不需要像看起来那样解码整个文件-count_frames
?