Как заставить ffmpeg уважать переменную start_time при объединении cdg и mp3? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь объединить два файла .cdg и .mp3, потому что я хочу сделать из них один файл .mkv.

Когда я делаю это, я получаю файл .mkv, но к сожалению, аудио не синхронизируется с видео.

Итак, мне было интересно, почему это так? Видимо, я должен пропустить параметр в моей команде или что-то в этом роде.

Что я делаю так:

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

Это работает нормально, но в данном конкретном случае результат не синхронизирован c на ~ 1,2 секунды. Это варьируется для каждой песни, от 0 до пары секунд.

Однако, если я делаю ffprobe для файла .cdg, я замечаю, что это число уже присутствует, как переменная 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

Тогда видео и аудио будут в идеальном синхронизации c.

Итак, мне интересно - какой параметр мне нужно добавить в мою команду, чтобы ffmpeg учитывал эту переменную?

1 Ответ

0 голосов
/ 05 февраля 2020

Я попытался добавить параметр -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
Do not process input timestamps, but keep their values without trying to sanitize them. In particular, do not remove the initial start time offset value.

Note that, depending on the vsync option or on specific muxer processing (e.g. in case the format option avoid_negative_ts is enabled) the output timestamps may mismatch with the input timestamps even when this option is selected.
...