Как заставить ffmpeg учитывать переменную start_time при объединении cdg и mp3?

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

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

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

Я делаю следующее:

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

Он работает нормально, но в данном конкретном случае результат рассинхронизирован примерно на 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

Тогда видео и аудио идеально синхронизируются.

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


person Steffen Poulsen    schedule 05.02.2020    source источник


Ответы (1)


Я попытался добавить параметр -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 включен) временные метки на выходе могут не совпадать с временными метками на входе, даже если этот параметр выбран.

person Steffen Poulsen    schedule 05.02.2020
comment
У меня была такая же проблема, и это тоже решило ее. Кстати, вы можете принять свой собственный ответ. - person Nick; 05.07.2020