понедельник, 3 мая 2010 г.

[life.video] Как я конвертировал mkv (avc+dts) в avi (divx+ac3)

Есть у нас дома маленький старенький медиацентр от Sony. Кроме DVD он еще может проигрывать avi-файлы, записанные на DVD/CD болванках. Но, к сожалению, в avi-шках поддерживается только DivX для видео и MP3, AC-3 для аудио. Поэтому видеофайлы для воспроизведения на этом комбайне приходится перегонять в DivX.

Раньше я пользовался двумя программами: VirtualDub (когда нужно было из XviD-а в DivX перегонять) и Auto Gordian Knot (для преобразования DVD в DivX). Пробовал еще много всякой всячены, но добавил к себе в список инструментов только одну программулину под скромным названием SUPER. Последней я пользовался когда нужно было mkv файлы в avi преобразовывать.

Нужно сказать, что со временем SUPER стала основным инструментом. Как я понимаю, в ней используется два разных тулкита: ffmpeg и mencoder. При декодировании можно выбирать любой из них. Первый, как мне кажется, работает шустрее но временами ломается. Второй стабильнее, медленнее, но качественнее. По крайней мере mkv в avi с помощью mencoder-а пережимаются без проблем чаще, чем в ffmpeg-ом.

Так вот, потребовалось пережать большой mkv файл в avi. Желательно с максимальным качеством и с сохранением звука 5+1. С перепаковкой видео из AVC в DivX SUPER (посредством mencoder-а) справился без проблем. А вот со звуком, который был в DTS-е, возникли проблемы. Ни mencoder, ни ffmpeg сделать это нормально не смогли (либо процесс конвертации вообще не запускался, либо же звук оказывался записанным в avi-шку неправильно).

Пришлось искать решение. Что заняло некоторое время, поскольку в видео/аудио я полный дилетант и знаю разве что названия кодеков/форматов, но не более.

Для начала я нашел интересный обзор инструментов для конвертации видео/аудио. Попробовал iWisoft Free Video Converter, FormatFactory и Any Video Converter. Но не получилось. Либо программы не поддерживали конвертацию в DivX, либо же не позволяли для DivX-овой avi-шки задавать звук в AC-3, либо же ограничивали количество каналов для AC-3 всего двумя.

Кстати говоря, из всего этого набора больше всего мне понравился FormatFactory.

Попробовал так же AviDemux. Он так же не позволял конвертировать видео в DivX, а с преобразованием DTS в AC-3 не справлялся.

Вообще, у меня сложилось впечатление, что все эти бесплатные программы используют одни и те же сторонние наработки. Соответственно, если в какой-нибудь свободной AC-3 библиотеке есть баг, то он проявляется сразу во всех бесплатных перекодировщиках.

В общем, бесплатного GUI-инструмента для преобразования mkv (avc+dts) в avi (divx+ac3) несколькими кликами мышки я не нашел (вполне возможно, что таковые и есть, просто мне не попались в нужный момент). Пришлось искать иные способы. Коих сразу нашлось два и оба они построены на том, что звуковая дорожка в DTS-формате вырезается из файла, затем преобразуется в AC-3, и новая дорожка помещается в результирующий avi-файл.

Первый способ основывается на использовании transcode. Вроде бы нужно натравить transcode на DTS, получить 6 wav-файлов (по одному на каждую дорожку), затем через внешние утилиты (к примеру BeSweet/BeHappy) эти wav-файлы собираются в один AC-3 файл. Мне этот способ показался слишком муторным, поэтому я воспользовался вторым.

А второй способ заключается в использовании утилиты eac3to. Он оказался очень простым. Я запустил из командной строки “eac3to my.dts my.ac3” и все – утилитка сама проанализировала dts-файл, сделала два прохода по нему и создала нормальный ac3-файл на выходе. Как говорится, без шума и пыли.

Итого, что мне потребовалось:

  • SUPER;
  • eac3to;
  • AviDemux.

Происходило все так:

  1. С помощью SUPER я перегнал mkv-файл в avi-файл с преобразованием AVC в DivX и с сохранением исходной звуковой дорожки. Получился my-tmp.avi в котором лежали divx+dts.
  2. С помощью AviDemux вырезал звуковую дорожку из my-tmp.avi и сохранил ее в my-tmp.dts.
  3. С помощью eac3to преобразовал my-tmp.dts в my-tmp.ac3.
  4. С помощью AviDemux создал из my-tmp.avi результирующий my-file.avi. Для этого я указал копировать видео поток из my-tmp.avi, а звуковой поток брать из внешнего файла my-tmp.ac3.

Вот и все.

Примечание. Вместо AviDemux здесь можно было бы использовать и VirtualDub. По крайней мере вырезать аудио поток из avi-шки VirtualDub может точно, я это проделывал. А вот может ли он вклеить AC-3 поток в avi-файл я не проверял.

Ну и раз уж пошла такая пьянка еще до кучи:

  • В AviDemux есть интересная фича – он автоматом режет результирующий avi-файл на фрагменты ограниченного размера. Например, если на выходе я ожидал 7Gb avi, то получил два avi – первый на 4Gb, второй на 3Gb. Самое плохое в этом то, что AviDemux их странно обзывает: первый получается my-file.avi, а второй my-file.avi01, третий –my-file.avi02 и т.д. Приходится их затем вручную переименовывать.
  • Есть такой мега-монстро-комбайн MediaCoder. Ставил его себе несколько раз, пробовал разные его версии. Но все время плевался и сносил нафиг. Какой-то он глючный, падает то и дело. Да и в настройках его хрен разберешься. В общем, когда я нашел SUPER, про MediaCoder я больше не вспоминал, хотя его часто упоминают как очень хороший перекодировщик.
  • Насколько я смог понять, DTS в двухканальный AC-3 можно перегнать в foobar2000. Шестиканальный AC-3 у меня сделать не получилось, а вот 6-ти канальный wav-файл из DTS-а foobar2000 строит.
  • Забавный эффект был в SUPER, когда я с помощью ffmpeg-а пытался конвертировать DTS в AC-3: началась конвертация довольно шустро, а вот затем… :) Затем работа шла, похоже, по принципу маляра Шлемиля – чем дальше ffmpeg уходил от начала файла, тем медленнее шла конвертация. И, когда я его прервал через сутки непрерывной работы, результирующий AC-3 поток оказался неправильным.

Комментариев нет: