我正在尝试生成一个保持恒定 PCR 周期为 95 毫秒的视频文件输出,目前我有这个命令(我删除了一些参数以使其更易于阅读):
ffmpeg -i $SRC_FILE -map 0:0 -map 0:1 -f mpegts -pcr_period 95 -r 23.976 -g 12 -x264-params:v keyint=12:min-keyint=12 -force_key_frames "expr:gte(t,n_forced*0.5)" $TARGET_FILE
我遇到的问题是,PCR 时间戳之间经常会有 95 毫秒的间隙,但我总是得到较小的间隙,例如,这些是视频文件随机块的 PCR 之间的间隙值(以毫秒为单位):
95, 14, 81, 95, 95, 95, 95, 39, 56, 95, 95, 95, 95, 69, 26, 95
尽管大多数这些值都是可以的,但我希望它们更加准确。
到目前为止,唯一可行的解决方案是增加 GOP 值,如果我将 -g 和 keyint/min_keyint 参数设置为高值(例如 300 而不是 12),我会得到更加恒定的间隙。(准确率超过 95%)
我不确定 ffmpeg 是否只是向每个关键帧添加 PCR 时间戳值,这就是为什么对于低 GOP 值间隙会减少的原因。
由于硬件限制,我无法减少 PCR 周期或增加 GOP 值,ffmpeg 可以做些什么来防止添加额外的 PCR 值?或者是否有其他工具可以用于此目的?