2010-07-01

Чистим MKV-файлы от ненужных треков

Имеем: кучу файлов MKV (типа file-01.mkv, file-02.mkv ... file-24.mkv), в каждом из которых множество треков (видео, аудио, субтитры).
Нужно: оставить в них только одну видео- и одну звуковую дорожку.

Для работы с MKV нам понадобится одна утилита: mkvtoolnix
sudo apt-get install mkvtoolnix

Чтобы посмотреть, какие треки есть в файле, сделаем так:
mkvinfo file-01.mkv

Получаем довольно полную картину состава файла. Но нам нужна только часть, поэтому отфильтруем ненужное:
mkvinfo file-01.mkv | grep -Gi 'A track\|track number\|track type\|codec id\|Language'

| + A track
|  + Track number: 1
|  + Track type: video
|  + Codec ID: V_MPEG4/ISO/AVC
|  + Language: und
| + A track
|  + Track number: 2
|  + Track type: audio
|  + Codec ID: A_AAC
|  + Language: rus
| + A track
|  + Track number: 3
|  + Track type: audio
|  + Codec ID: A_AAC
|  + Language: jpn
| + A track
|  + Track number: 4
|  + Track type: subtitles
|  + Codec ID: S_TEXT/ASS
|  + Language: rus

Запоминаем номера нужных треков и их содержимое. Например, мне нужны только первый и третий трек. Берем их из исходного файла и создаем новый, содержащий только эти два трека:
mkvmerge file-01.mkv --vtracks 1 --atracks 3 -o file-01_.mkv
Если в файле только один видеотрек (как обычно и бывает), то достаточно и этого:
mkvmerge file-01.mkv -a 3 -o file-01_.mkv
Если субтитры тоже нужно включить, то
mkvmerge file-01.mkv -a 3 --stracks 4 -o file-01_.mkv

Ну а теперь, для пробы создадим копии первых пяти файлов, но только с нужными нам 1 и 3 треками:
for i in *{01..05}.mkv; do mkvmerge "$i" -a 3 -o "${i%.mkv}_.mkv"; done

Все получилось? Тогда можно и остальные обработать.

P.S. На всякий случай, если вы хотите вытащить оттуда субтитры в отдельный файл, то никто вам не мешает. К примеру, так:
mkvextract tracks file-01.mkv -c UTF-8 4:file-01.ass

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