3 янв. 2015 г.

mkv: change default audio track

Новый год, отдых, смотрим сериалы, и вдруг засада: релизер при монтаже очередной серии не перевыставил флаг умолчания на русскоязычной дорожке в mkv-контейнере, а телевизор сменить аудиодорожку не умеет. 
Решение довольно просто: перевыставить флаги на аудио-дорожках в нужном порядке. Для этого нужны утилиты mkvpropedit и mkvinfo, доступные в пакете mkvtoolnix. Для linux пакет доступен в репозиториях соответствующего дистрибутива, для windows можно взять, к примеру, тут
Сначала нужно узнать, каким образом идентифицировать треки в контейнере (под рукой был ноут с windows 7, примеры оттуда):

c:\Program Files\MKVToolNix>mkvinfo.exe g:\video.mkv

Вывода там вагон, ищем информацию об аудиодорожках:
| + Дорожка
|  + Номер дорожки: 2 (ID дорожки для mkvmerge и mkvextract: 1)
|  + UID дорожки: 1095754913
|  + Тип дорожки: audio
|  + Флаг по умолчанию: 1
|  + ID кодека: A_AC3
|  + Продолжительность по умолчанию: 32.000ms (31.250 кадров/полей в секунду для
 видеодорожки)
|  + Audio track
|   + Частота дискретизации: 48000
|   + Каналы: 6
|  + Включено: 1
|  + Флаг 'принудительно': 0
|  + Флаг сшивания: 1
|  + Минимальный кэш: 0
|  + Максимальный BlockAddition ID: 0
|  + Codec decode all: 1
| + Дорожка
|  + Номер дорожки: 3 (ID дорожки для mkvmerge и mkvextract: 2)
|  + UID дорожки: 1628356481
|  + Тип дорожки: audio
|  + ID кодека: A_AC3
|  + Продолжительность по умолчанию: 32.000ms (31.250 кадров/полей в секунду для
 видеодорожки)
|  + Язык: rus
|  + Имя: Fox Life
|  + Audio track
|   + Частота дискретизации: 48000
|   + Каналы: 2
|  + Включено: 1
|  + Флаг по умолчанию: 0
|  + Флаг 'принудительно': 0
|  + Флаг сшивания: 1
|  + Минимальный кэш: 0
|  + Максимальный BlockAddition ID: 0
|  + Codec decode all: 1
Нас интересует две вещи: во-первых, где стоит атрибут "флаг по умолчанию: 1" (эту дорожку и видит наш телевизор); во-вторых, нужно знать UID или ID дорожки для изменения настроек.
Теперь мы знаем все необходимое:
c:\Program Files\MKVToolNix>mkvpropedit.exe -v --edit track:=1628356481 --set flag-default=1 --edit track:=1095754913 --set flag-default=0  g:\video.mkv
The file is being analyzed.
Обработано: [=========================] 100%
Изменение для '--set flag-default=1' выполнено. Записей установлено: 1
Изменение для '--set flag-default=0' выполнено. Записей установлено: 1
Изменения записаны в файл.
Элемент Tracks записан.
Готово.
Вместо UID можно обращаться по ID (как правило, первым треком - id 0 - идет видеодорожка, затем по порядку все аудиодорожки), результат будет тот же.