首页 > 解决方案 > 结合cdg和mp3时如何使ffmpeg尊重“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 尊重这个变量?

标签: audioffmpegmp3mkv

解决方案


我尝试添加 -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 的情况下),即使选择了此选项,输出时间戳也可能与输入时间戳不匹配。


推荐阅读