Несинхронизированное аудио-видео с помощью mencoder

6464
nhinkle

Я преобразовал файл mkv (matroska) в avi, используя ffmpeg:

ffmpeg -i input.mkv -f mp4 -vcodec mpeg4 -sameq -r 29.97 -b 512kb -acodec ac3 -ab 128kb -vol 512 output.avi 

Выходной файл воспроизводится нормально, используя mplayer. После этого я использовал mencoder для вставки субтитров:

mencoder output.avi -o new.avi -oac pcm -ovc lavc -subfont-text-scale 3 -sub subtitle.srt 

После воспроизведения видео «new.avi» видео и аудио не синхронизированы. Какие параметры я могу ввести в mencoder для синхронизации A / V?

Я также попробовал ffmpeg -newsubtitleвариант, но не могу заставить его работать. Любые примеры использования -newsubtitleбудет принята с благодарностью.

1
Я предлагаю посмотреть на (а) полное кодирование с помощью mencoder, здесь нет необходимости в ffmpeg; (b) -mc 0, -noskip и -vf harddup. derobert 14 лет назад 0
Вы воспроизводили его после преобразования, но до вставки субтитров? это синхронно тогда? quack quixote 14 лет назад 0

2 ответа на вопрос

1
Justin Smith

Как упоминал Дероберт, вы можете сделать все это в mencoder, который использует библиотеки ffmpeg и гораздо более мощный, это позволит избежать транскодирования, которое вы делаете в настоящее время. Опция -audio-delay в mencoder устанавливает смещение для аудио относительно видео, если разница смещений является абсолютной. Вы также можете попробовать разные настройки -autosync (значение по умолчанию 0, в руководстве указано до 30).

1
quack quixote

Если вы действительно не нуждаетесь в AVI, вы можете попробовать использовать mkvmerge из набора Mkvtoolnix сделать это (вместо MEncoder ). MKV могут содержать «мягкие» дорожки субтитров, что означает, что вам не нужно перекодировать видеопоток, чтобы включить их. (Это также означает, что при желании игроки могут отключить дорожки субтитров во время воспроизведения.)

Добавить файл SRT в MKV так же просто, как

$ mkvmerge -o with-subtitles.mkv without-subtitles.mkv mymovie.srt  or to specify a language for the subtitle track: $ mkvmerge -o with-lang-codes.mkv without-lang-codes.mkv --language 0:eng english.srt --default-track 0 

(адаптировано из раздела примеров на странице руководства mkvmerge, указанной выше).

Похожие вопросы