Для перекодирования видео, упакованного в контейнер MKV (Matroska), можно
использовать следующую конструкцию:
Распаковываем:
mkvextract tracks input.mkv 1:temp_video.avi 2:temp_audio.ac3 3:output.srt
Утилита mkvextract входит в состав стандартного пакета mkvtoolnix, ее можно загрузить
со страницы http://www.bunkus.org/videotools/mkvtoolnix/)
В процессе работы mkvextract покажет какой в данном mkv файле использован видео и аудио кодек,
что даст возможность принять решение - прекодировать другим кодеком или нет.
Объединяем в AVI:
ffmpeg -i temp_audio.ac3 -i temp_video.avi -vcodec copy -acodec copy output.avi
Если ffmpeg в процессе кодирования выдает ошибку и прекращает работу, можно попробовать:
mencoder temp_video.avi -audiofile temp_audio.ac3 -ovc copy -oac copy -o output.avi
Еще способ:
mencoder input.mkv -ovc copy -oac copy -of avi -o output.avi
Другой вариант, с перекодированием:
mencoder input.mkv -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi -o output.avi
Если возникает ошибка "Too many audio packets in the buffer", то можно
попробовать двухэтапную схему:
Выдергиваем несжатую аудиодорожку:
mplayer input.mkv -ao pcm:fast:file=audio.wav -vc null -vo null
Перекодируем видео, подставив звук через "-audiofile audio.wav":
mencoder input.mkv -ffourcc divx -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=6000 \
-audiofile audio.wav -oac mp3lame -lameopts vbr=3 -o output.avi
Для конвертации для просмотра на КПК нужно уменьшить vbitrate до 400 и добавить
опции масштабирования "-sws 2 -vf scale=352:-3".
|