Я пытаюсь перепаковать файл .vob (который я получил с помощью vobcopy) в контейнер mp4 (mkv тоже это сделает) с помощью ffmpeg 4.2.4-ubuntu0.1. Изначально перепаковка завершилась, но я получил эти ошибки:
[mp4 @ 0x560f9a37e5c0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
и несколько тысяч раз
[mp4 @ 0x560f9a37e5c0] pts has no value
Поэтому я попытался исправить это с помощью -fflags +genpts
:
ffmpeg -fflags +genpts -i 'video.vob' -c copy 'video.mp4'
После обработки около 90000 кадров ffmpeg каким-то образом зависает (но процессор продолжает работать на 100%) и его можно остановить только с помощью kill
сочетания клавиш Ctrl+C.
Я попробовал сделать то же самое с другим файлом .vob, и на этот раз ffmpeg завис в другой точке.
При создании полного журнала отладки я заметил, что после прерывания программы вывод всегда показывает один и тот же последний отредактированный кадр (92775). Здесь вы можете его просмотреть:https://paste.ubuntu.com/p/tbhMmpQwff/
решение1
Я исправил проблему, добавив флаг +igndts
:
ffmpeg -fflags +genpts+igndts -i 'video.vob' -c copy 'video.mp4'
Это привело к появлению некоторых сообщений об ошибках в точке, где ffmpeg ранее зависал, но созданный видеофайл был в порядке.
[mp4 @ 0x56482f355a00] Invalid DTS: 333993600 PTS: 0 in output stream 0:0, replacing by guess
[mp4 @ 0x56482f355a00] Non-monotonous DTS in output stream 0:0; previous: 334018800, current: 334018800; changing to 334018801. This may result in incorrect timestamps in the output file.
Я не уверен, что вызвало проблему и как +igndts
ее исправить, но я рад, что это работает.