如何让 ffmpeg 在组合 cdg 和 mp3 时尊重"start_time"变量?



我正在尝试合并两个.cdg和.mp3文件,因为我想用它们制作一个.mkv文件。

当我这样做时,我得到一个.mkv文件,但不幸的是音频没有与视频同步。

所以,我想知道这是为什么?显然,我的命令或其他东西上缺少参数。

我所做的是这样的:

ffmpeg -y -i song.cdg -i song.mp3 -pix_fmt yuv420p -vcodec libx264 -acodec copy song.mkv

它工作正常,但在这种特殊情况下,结果不同步~1.2秒。这因歌曲而异,从 0 到几秒钟不等。

但是,如果我在 .cdg 文件上执行 ffprobe ,我注意到这个数字已经存在,作为"start_time"变量:

ffprobe -v error -show_format -show_streams song.cdg
...
start_time=1.186667
...

因此,如果我只是直接将此数字用作 -itsoffset 参数:

ffmpeg -y -itsoffset 1.186667 -i song.cdg -i song.mp3 -pix_fmt yuv420p -vcodec libx264 -acodec copy song.mkv

然后视频和音频完美同步。

所以,我想知道 - 我需要在我的命令中添加什么参数才能让 ffmpeg 尊重这个变量?

我尝试添加 -copyts 参数,它解决了我的问题。

ffmpeg -copyts -y -i song.cdg -i song.mp3 -pix_fmt yuv420p -vcodec libx264 -acodec copy song.mkv
<小时 />

https://ffmpeg.org/ffmpeg.html

-copyts
不处理输入时间戳,但保留其值而不尝试清理它们。特别是,不要删除首字母 开始时间偏移值。

请注意,根据 vsync 选项或特定的复用器 处理(例如,如果格式选项avoid_negative_ts 启用(输出时间戳可能与输入时间戳不匹配 即使选择了此选项。

最新更新