6 ноября 2010 г.

Матрёшка: пакуем

Скачал тут фильм себе посмотреть. Фильм пришел в виде набора файлов: movie.avi, movie.Eng.ac3, movie.Rus.srt, movie.Eng.srt. Смотреть такое неудобно. MPlayer позволяет переключаться между различными звуковыми дорожками и субтитрами, но ему тяжело объяснить, что всё это барахло в каталоге относится к фильму. Особенно меня напрягло то, что именно этот торрент я качал ради оригинальной звуковой дорожки, которая лежит в отдельном файле.

Я решил попробовать перепаковать фильм в Матрёшку так, как мне нужно для удобного просмотра. Это оказалось проще пареной репы. Итак, для начала потребуется установить mkvtoolnix (пакет в Debian'е так и называется). Далее, имея в текущем каталоге файлы, указанные выше, делаем:

$ mkvmerge -i movie.avi
File 'movie.avi': container: AVI
Track ID 0: video (XVID)
Track ID 1: audio (AC3)
Track ID 2: audio (MP3)
В этом AVI две звуковые дорожки, обе на русском языке, причем 2-я мне не нравится, её надо из результата выкинуть.
$ mkvmerge -o movie.mkv \
  --language 1:ru --atracks 1 movie.avi \
  --language 0:en movie.Eng.ac3 \
  --language 0:ru movie.Rus.srt \
  --language 0:en movie.Eng.srt
Эта команда создаст файл movie.mkv, в котором будут две звуковые дорожки и две дорожки с субтитрами. Параметр --atracks 1 для первого (0-го, как считает mkvmerge) файла указывает, что нужно брать только 1-ю (по показаниям mkvmerge -i) звуковую дорожку из этого файла, т.к. вторая мне не нравится. Это уже можно смотреть, но мне больше нравится, когда умолчательным является язык оригинала. MPlayer по умолчанию использует первую по порядку звуковую дорожку и первую дорожку субтитров, поэтому нужно изменить порядок следования дорожек:
$ mkvmerge -o movie.mkv \
  --track-order 0:0,1:0,0:1,3:0,2:0 \
  --language 1:ru --atracks 1 movie.avi \
  --language 0:en movie.Eng.ac3 \
  --language 0:ru movie.Rus.srt \
  --language 0:en movie.Eng.srt
Параметр --track-order? принимает разделенный запятыми список пар <FILE_NUM>:<TRACK_ID>, где FILE_NUM — порядковый номер файла в командной строке, считая с 0; TRACK_ID — ID дорожки, как показывает mkvmerge -i. В принципе, можно убрать указание двух последних дорожек из --track-order, указав файлы субтитров в нужном порядке.

Вуаля! У нас один файл с фильмом, с двумя звуковыми дорожками и двумя дорожками с субтитрами. Перепаковка идёт очень быстро и без перекодирования, а значит и без потери качества. При переключении дорожек MPlayer показывает язык выбранной дорожки, что удобно.

Удивительно, зачем ещё используют AVI?

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

Отправить комментарий