我在播放某些 MKV 容器(89 个项目,总计 196.3 GB)时遇到了问题。
音频+视频以 25 fps 编码,但字幕完全不同步 - 以 23.976 fps 编码。
我的问题是:有什么方法可以批量更改/重新编码这些电影的帧速率为 23.976 吗?
答案1
您可以尝试将视频和音频重新编码为不同的帧速率,同时保持字幕不变:
ffmpeg -i input.mkv -c:v libx264 -crf 21 -c:a aac -strict experimental -b:a 128k -r 23.98 -c:s copy output.mkv
CRF 设置视频质量。选择较低的值可获得更好的质量,例如 18。23 是 x264 的默认值。
答案2
正如人们在评论中所说的那样,处理您实际尝试解决的问题的正确方法是调整字幕,或者告诉您的播放器它们适用于不同速度的视频。(例如,mpv --sub-fps 25
将保持 25fps 节目的字幕与 24/1.001 fps 的副本同步。)(http://mpv.io/)
但要回答实际问题:
您不需要重新编码来改变 fps。ffmpeg无法使用新时间戳重新混合遗憾的是,无需重新编码,但这是 ffmpeg 的设计限制。视频编码有损且非常慢,所以不要这样做。
尝试mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
更改视频 FPS。这不会影响音频时间,因此您将遇到音频/视频不同步的情况。 0:
选择输入文件中的轨道0
,我认为通常是视频。
在使用音高保持加速过滤器处理音频后,您需要重新编码音频。我通常只在播放时使用 mpv / mplayer 的scaletempo
过滤器执行此操作(mpv 会自动插入它)。ffmpeg 有一个atempo
过滤器可能可以解决问题。
因此,将减慢速度的音频与 24/1.001fps 视频混合,然后您应该再次获得一个可以正常工作的文件。
我并没有真正测试过所有这些,因为通常你永远不需要这样做。只需告诉你的播放器字幕的速度。mpv --speed 25025/24000 -subfps 25 myfile.mkv
如果你有一部英国节目的 24/1.001 fps 副本,而该副本原本是 25fps,你甚至可以使用它以 25fps 的速度即时播放视频,并且你想以原始速度播放它,同时使用恒定音调音频加速。
答案3
无需编码,也不会损失质量,至少对于 Windows 来说是这样。使用字幕编辑软件,进入同步,将帧速率从原始字幕的帧速率更改为您想要的帧速率,然后保存为新的同步字幕。