Главная » Файлы » Мои файлы

Уроки с контейнером MKV
16.10.2009, 11:15
Уроки с контейнером MKV

Данные уроки тем хороши, что позволяют новичкам (и не только) узнать: что же такое MKV, как его разрезать, как добавить или убрать ненужные дорожки и многое другое

Для начала представимся...

Контейнер – основополагающий файл, служащий для сохранения в цифровом виде преобразованной аналоговой информации (т.е. то, что мы видим и слышим в реальной жизни). Как правило, такая сохраненная аудио и видео информация занимает большой объем, поэтому ее сжимают, используя различные аудио и видео кодеки. Все служебные для работы с этим файлом, как правило, устанавливаются вместе с операционной системой. 



Кодек – сокращение от английского Coder/Decoder – программа, позволяющая преобразовать записанную информацию так, чтобы она занимала меньше места. При этом расширение файла может не меняться, т.е. основная структура контейнера не изменится, изменится представление в нем аудио и видеоданных, но чтобы воспроизвести такой файл, «зашифрованный» при помощи какого-либо кодека, необходимо, чтобы он был установлен на компьютере пользователя.
Большая просьба не путать!
Контейнер никогда и ничего не сжимает!!! Это всего лишь упаковка, хранящая в себе все аудио- и видеоданные и дополнения к ним! 



Matroska (Матрёшка) — проект, нацеленный на создание открытого гибкого кросс-платформенного (включая аппаратные платформы) стандарта форматов мультимедийных контейнеров и набора инструментов и библиотек для работы с данными в этом формате. Этот проект является развитием проекта MCF, но значительно отличается тем, что основан на EBML (Extensible Binary Meta Language — расширяемый двоичный метаязык) — двоичном аналоге языка XML. Использование EBML позволяет расширять формат без потери совместимости со старыми программами.

Расширения файлов Matroska

Код:
.mkv
- для видео (с субтитрами и звуком)
Код:
.mka
- для аудио-файлов
Код:
.mks
- для субтитров.

Возможности формата, закладываемые в Matroska:

- трансляция по Интернету (протоколы HTTP и RTP);
- быстрая перемотка в файле;
- устойчивость к ошибкам;
- экранные меню (как на DVD дисках);
- разбиение файла на главы (Chapters);
- переключаемые на лету субтитры;
- переключаемые звуковые дорожки;
- модульная расширяемость.

Следует отметить, что проект аудио/видео контейнера не включает в себя форматов сжатия видео и кодеков (таких, как MP3 или JPEG). Это упаковка, которая может содержать большое число потоков аудио, видео и субтитров, позволяя пользователю хранить в одном файле целый фильм и проигрывать его мультимедиа-проигрывателем.

Matroska является открытым проектом (open standard). Это означает, что для персонального использования она абсолютно бесплатна, а техническая спецификация формата битового потока доступна любому, даже компаниям, желающим встроить поддержку формата в свои продукты (для этого потребуется специальная лицензия). Исходный код всех библиотек, созданных группой разработчиков проекта Matroska распространяется на условиях LGPL (библиотека для проигрывания, написанная на C с использованием целочисленной арифметики, распространятся также на условиях лицензии BSD).

Matroska является прямой открытой альтернативой контейнерам AVI, ASF video, MOV, RealMedia, MP4, MPG. Существует поддержка адаптации и реализации библиотек Matroska для OpenBeOS Mediakit и GStreamer (мультимедийной среды ОС GNU/Linux, похожей на Microsoft DirectShow для Windows) и набора фильтров DirectShow для воспроизведения и создания файлов Matroska в ОС Windows.

Чем хорош этот тип файла?

1) MKV универсальней чем AVI, потому что AVI не может содержать (или может, но работает это не всегда корректно) внутри видео в форматах: H264, AVC1, WMV, MPEG1, MPEG2, и звук AAC, а MKV может.
2) MKV универсальней чем MP4, потому что MP4 не может содержать внутри видео в форматах: WMV, MPEG1, MPEG2, и не может содержать внутри звук в форматах: AC3, MP2, WMA, а MKV может.

Для работы с файлами, упакованными в этот тип контейнера, нам понадобятся следующие программы:

MKVMergeGUI: программа для работы с контейнерами MKV
MKVExtract GUI: дополнение к программе MKVmerge GUI, которая может понадобится в некоторых случаях, например при необходимости поможет нам разложить файл в формате MKV на чистые составляющие (MKVmerge GUI этого не умеет, всё что она записывает на диск автоматически упаковывается в MKV). архив с этой программой нужно распаковать в каталог с установленной MKVmerge GUI, поскольку самостоятельно она не работоспособна. Это только управляющая оболочка.
BeLight: программа которая нужна для перекодирования, при необходимости, звука в формат AAC.
MeGUI: программа которую также можно использовать для перекодирования звука в формат AAC.
YAMB: программа которая нужна при изготовлении контейнеров MP4 из исходного материала MKV, возможно работа с этой версией будет невозможна из-за устаревшего железа/OC, тогда воспользуйтесь более старой версией.
VirtualDub MOD: программа которая понадобится при изготовлении контейнеров AVI из MKV.

Итак, в данной теме будут расмотрены наиболее основные варианты работы с контейнером MKV.


- Как добавить аудио-дорожку/субтитры...
- Как добавить несинхронизированную аудио-дорожку...
- Как удалить ненужную аудио-дорожку/субтитры...
- Как сменить аудиодорожку/субтитры по-умолчанию...
- Как разрезать фильм на 2 части...
- Как укоротить фильм...
- Как сделать MKV из других форматов без потери качества видео...
- Как из MKV сделать MP4 без потери качества видео...


Как добавить аудио-дорожку/субтитры...


1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё основной файл фильма, как пример вот этот, Spidi.Gonshik.BDRip.720p.x264.mkv
2. Ещё раз нажав на add, подгружаем файл звуковой дорожки (и/или файл субтитров в форматах SRT, SSA, ASS, IDX), которую хотим добавить Spidi.Gonshik.BDRip.720p.x264.DTS.x264.rus.ac3. Получим что-то вроде этого: 



3. Поля Track name и Language на закладке General track option можно заполнить, как на скриншоте (а можно и не заполнять, если влом). Галочку со встроенных в релиз английских субтитров можно снять, зачем они тем, кто нуждается в русской дорожке.. В поле Default track flag у русской дорожки можно поставить yes, если вы хотите сделать её дорожкой по-умолчанию (автоматически проигрываемой при запуске фильма), в противном случае проигрывание будет начинаться с английским звуком и на русский придётся переключать ручками в плеере.
4. В строке Output filename указываем, куда положить получающийся файл (и как его назвать, при желании).
5. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера теперь уже с двумя дорожками.
После старта программы появляется следующее окно: 



....и если в полях Warnings и Errors в процесе работы программы нечего не появилось, то значет всё ОК...
6. Ждём окончания процесcа...
7. Запускаем получившийся файл и проверяем, на всякий случай, синхронизацию с русской дорожкой... Мало-ли что, возможно её рассинхронизация, если только источник получения дорожки не гарантирует, что она специально подогнана именно под этот релиз фильма.....


Как добавить несинхронизированную аудио-дорожку...


Итак, руководствуясь предыдущим разделом удалось приципить дополнительную звуковую дорожку к фильму, но к сожалению просмотр результата показал, что звук новоявленой дорожки явно не согласован с видео. Если рассинхронизация в начале и конце фильма одинакова (к примеру на слух определяется отставание звука от видео где-то на 3 сек), то можно попробовать исправить ситуацию достаточно простым способом, использовав возможность программы задавать задержку для конкретной звуковой дорожки. (Если явно видно, что рассинхронизация нелинейна, т.е. в начале различие 2 сек, а к концу фильма увеличивавется до 4 сек, то это требует уже достаточно сложных действий с подгонкой дорожки в видеоредакторе и в рамках данной статьи не рассматривается (на самом деле, если изменения накапливаются монотонно, а не возникают скачками, например из-за удалённых отсутствующих на видео дорожке фрагментов фильма, то MKVMergeGUI тоже способна поправить ситуацию, если задать степень нарастания или уменьшения расхождения в строке Stretch by в виде соотношения двух чисел, к примеру 1/1.043 или аналогично 1000/1043. При острой необходимости можете попробовать, но процесс этот для сильных духом, т.к. придётся каждый раз пересобирать контейнер заново полностью). Так-же должен заметить, что рассинхронизация в принципе может появится из-за очень высокой загруженности центрального процессора при декодировке фильма, поэтому убедитесь, что ваш компьютер действительно способен воспроизвести данное кино. Например для показа HDDVD-Rip-a, да ещё и возможно на фоне каких-то других выполняемых задач, нужен весьма мощный компьютер).
Вводная часть закончена, теперь, собственно, что нужно делать. А собственно то-же самое, что и при обычном добавлении дорожки, только теперь, выбрав в окне Tracks: свежеподключаемую дорожку, нужно чуть ниже выбрать закладку Format Specific Options и указать на ней в строке Delay (in ms) нужную задержку. Если звук обгоняет видео - задержка задаётся положительная (просто числом: 1сек=1000), если звук отстаёт от видео, то отрицательная (с минусом в начале числа, как на скриншоте). 



Или вот пример подгонки звуковой дорожки от видео-кассеты в формате PAL (25 кадров в сек) к HD-релизу с объявленной частотой кадров 23.976. Правда что-то не совсем соответствовало стандарту и пришлось вместо стандартного, для подобного случая, соотношения 125124/120000 (удобнее использовать соотношение 25000/23976, но я в том случае 'плясал' от 12512/12000) подгонять вручную и вышло 12512/12000. Соотношение 1200/1253 или в нашем случае 1253/1200, которое не знаю как затесалось в комментарий к полю stretch (может просто от балды или для примера нестандартной растяжки) здесь не годится. 



Естествено задать всё абсолютно точно с первого раза не получится, поэтому гарантированно понадобится несколько попыток. При этом, должен заметить, совсем не обязательно дожидаться окончания процесса сборки контейнера (по крайней мере необязательно в случае линейного сдвига, т.е. задания ТОЛЬКО параметра Delay). Если в вашем распоряжении есть видео плейер, способный на "воспроизведение недокачанного или повреждённого видео", то вполне реально нажав на кнопку Abort в окне, показывающем процесс пересборки фильма, остановить этот процесс досрочно (для фильиа в 90 минут 10% уже с избытком достаточно) и попробовать просмотреть этот недоделанный файл нужным видео-плейером (у меня лучше всего это получается делать KMPlayer-ом). Если вы видите, что ошиблись в величине (или даже направлении задержки, т.е. стало ещё хуже), то вносите соответствующие поправки в величину задержки или растяжки и повторяете процедуру сборки контейнера. И так столько раз, сколько понадобится для создания удовлетворяющей вас синхронизации звука соответствующей дорожки и видео. Обычно это не долго. Значительно хуже при нелинейной рассинхронизации (или при сочетании обоих вариантов). Тут скорее всего придётся муксить каждый раз до конца, по крайней мере на последних стадиях подгона. Например процесс подгона дорожки к указанному на втором примере фильму Гринч занял у меня почти пол дня (правда это было не единственное, чем я занимался, но чтоб было понятно, что процесс длительный, если вам сразу не повезёт). Ну и в конце обязательно проверяете синхронизацию по всей длине кинофильма (хотя-бы в 5-6 точках).

Следует обратить внимание, что подгонка звука средствами MKVtoolNIX не так сильно портит его качество, как случилось-бы при проведении этой операции в подавляющем числе аудио-редакторов из-за необходимости повторного кодирования в сжатый формат. Все изменения основаны на сдвиге или нелинейной синхронизации внутри контейнера (кстати ещё одно приемущество этого контейнера над другими). Таким образом, если вытащить из полученного фильма дорожку обратно и сравнить с исходной, то в случае растяжки/сжатия (Stretch) она останется вообще без малейших изменений (отрицательный момент в данном случае в том, что засинхронизированную таким способом дорогу нельзя отдать кому-нибудь отдельно от фильма для 'простого приклеивания', нужно будет обязательно сообщить также параметры 'растяжки') и после перекодирования в AVI (если такая мысль придёт в голову) синхронизация 'чудесным образом' исчезнет, а в случае задания задержки (Delay), происходит удаление или добавление фреймов в начале дорожки и в этом случае дорожка остаётся 'синхронизированной' даже после вытаскивания из фильма, т.е. её можно передать другому лицу так сказать в 'готовом' виде.


Как удалить ненужную аудио-дорожку/субтитры...


Иногда возникает необходимость удаления из фильма в контейнере MKV не нужных, по вашему мнению, звуковых дорожек или дорожек субтитров. Ну например фильм не влезает на диск DVD5, а очень хочется. При этом присутствует как русская дублированная, так и оригинальная звуковые дорожки и вы считаете, что русского дубляжа вам вполне достаточно (хотя с этим всегда можно поспорить...). Резать фильм на 2 части (как это сделать мы обсудим в другом разделе статьи) и записывать их на разные диски тоже желания не возникает. Итак, что нужно сделать:

1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё файл фильма;
2. В окне Tracks убираем галочки с ненужных вам звуковых и субтитровых дорожек. Вот как на примере отключается дорожка на языке майа и русские субтитры, остаётся, естественно, видео дорожка и звуковая дорожка с наложенным русским переводом (но не могу заметить, что лучше наоборот убрать русскую дорогу, но это уже кому как нравится): 



3. В строке Output filename указываем, куда положить получающийся файл (и как его назвать, при желании).
4. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера без 'лишней' аудио-дорожки.
5. Ждём окончания процесса пересборки контейнера...
6. Если полученный файл всё равно не лезет на DVD5 (или куда там была попытка его втиснуть) возможно попробовать ещё 2 варианта - если не лезет совсем чуть-чуть, можно попытаться отрезать от фильма финальные титры (варварство, но если ОЧЕНЬ нужно...), либо записать фильм, не удаляя из него ничего, на два диска (или на один двухсторонний (не путать с двухслойным) диск, если таковой можно достать). Как это конкретно делается, рассмотрено в разделах ниже;


Как сменить аудиодорожку/субтитры по-умолчанию...


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

1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё файл фильма;
2. В окне Tracks выбираем нужную (на примере русскую) дорожку и, при необходимости, используя кнопку up справа от этого окна передвигаем её на 2-ю позицию в списке (на первом видео-дорожка). Это вовсе не необходимо, но желательно. Затем ниже на закладке General track options, в списке выбора Default track flag выбираете yes (если такой флаг был ранее установлен для другой аудио-дорожки, он автоматически снимется, вручную делать этого не надо) 



3. Если нужно проделываем аналогичную операцию для дорожек с субтитрами, выставив Default flag в yes для нужной дорожки. Передвигать её, если вы решите это сделать, нужно уже на 3-ю позицию в общем списке. Но для дорожек с субтитрами эта операция врятли необходима;
4. Ну и далее, как обычно, в строке Output filename указываем, куда положить получающийся файл (и как его назвать).
5. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера.
6. Получаем фильм с изменёнными приоритетами
7. Обязательно проверяем полученный результат (не дай бог удалите исходный материал, а потом выяснится, что вышло немного не то, что ожидалось)...


Как разрезать фильм на 2 части...


Фильм размером 7Гб не влезает на DVD5, хочется дать посмотреть кино знакомому, а у него винчестер с файловой системой FAT32 и множество других (т.ч. самых идиотских на первый взгляд) причин по которым необходимо разрезать фильм в контейнере MKV на 2 и более частей. Вновь обращаемся к услугам программы MKVMergeGUI:

1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё файл фильма;
2. Переключаемся на закладку Global где у нас появляется возможность задать на какие по размеру части мы будем разделять наше кино. Ставим галочку Enable Splitting и получаем доступ к одному из трёх вариантов задания точек разреза:
...after this size - можно выбрать размер части или задать свой, используя следующие допустимые сокращения(1.3G=1.3Gb, 105M=105Mb, 1530K=1530Kb)
...after this duration - можно задать длительность частей в секундах (1750s) или в стандартном формате ЧЧ:ММ:СС (00:29:10), как удобнее;
...after this timecodes - и самый продвинутый способ, позволяющий произвести разрезание на неравные части руководствуясь списком таймкодов (задаются аналогично пред. части в секундах или стандартном формате, причём можно вперемешку). Например режем на 4 части таким образом:
320s,1700s,01:22:30 - обратите внимание - никаких пробелов между точками разреза!
На выходе получаем 4 файла длиной 320 сек., 1380 сек., 3250 сек. ну и чего ещё там останется до конца фильма.
правда нужно учитывать, что разрезание происходит по ближайшим ключевым кадрам и абсолютной точности достичь трудно (особенно, если ключевые кадры на видео-дорожке расставлены не очень часто, обычно с шагом где-то 150-300 кадров /6-12 секунд/) 



3. Можно поставить галочку на link files, все приличные плейеры (знающие спецификацию контейнера MKV) будут воспринимать такую последовательность частей, как единый фильм (даже время показывается общее, а не отдельно для каждой части). Разумеется для этого необходими, чтобы все части лежали в одном месте;
4. Ну и далее, как обычно, в строке Output filename указываем, куда положить получающийся файл (и как его назвать).
5. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера.
6. Ждём окончания процесса пересборки контейнера...
7. Получаем набор из 2 и более файлов
8. Обязательно проверяем полученный результат (не дай бог удалите исходный материал, а потом выяснится, что вышло немного не то, что ожидалось)


Как укоротить фильм...


Скачаный BDRip не влезал  на DVD5 буквально из-за лишних 78Мб, а резак наотрез отказался делать overburn болванки с таким перерасходом. Пришлось пожертвовать частью финальных титров. Делается это практически аналогично разрезанию диска на части, описанному в предыдущем разделе, только предварительно надо присмотреть в фильме точку (точки) разреза. А затем всё, как обычно:

1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё файл фильма;
2. Переключаемся на закладку Global где у нас появляется возможность задать на какие по размеру части мы будем разделять наше кино. Ставим галочку Enable Splitting и получаем доступ к одному из трёх вариантов задания точек разреза:

...after this size - можно выбрать размер части или задать свой, используя следующие допустимые сокращения(1.3G=1.3Gb, 105M=105Mb, 1530K=1530Kb)
...after this duration - можно задать длительность частей в секундах (1750s) или в стандартном формате ЧЧ:ММ:СС (00:29:10), как удобнее;
...after this timecodes - и способ, позволяющий произвести разрезание на неравные части руководствуясь списком таймкодов (задаются аналогично пред. части в секундах или стандартном формате, причём можно вперемешку)

Для нас подходит, как второй способ (если планируется отрезать только кусочек от хвоста фильма и нужна одна точка разреза) или третий способ, если есть возможность обкорнать кое-что с начала, например пожертвовать заставкой киностудии и требуется вырезать серединку фильмы. Правда опять замечу, что нужно учитывать, что в реальности разрезание происходит не точно по указанным точкам, а по ближайшим ключевым кадрам и абсолютной точности достичь трудно (особенно, если ключевые кадры на видео-дорожке расставлены не очень часто, обычно с шагом где-то 150-300 кадров /6-12 секунд/) 



3. Ну и далее, как обычно, в строке Output filename указываем, куда положить получающийся файл (и как его назвать).
4. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера.
5. Ждём окончания процесса пересборки контейнера...
6. Получаем набор из 2-х, 3-х (смотря, как резали) файлов - нас, естественно, интересует самый большой, это и должен быть наш укороченный вариант фильма
7. Обязательно проверяем полученный результат (не дай бог удалите исходный материал, а потом выяснится, что вышло немного не то, что ожидалось)


Как сделать MKV из других форматов без потери качества видео...


Если вы собираетесь просматривать созданное вами видео только на компьютере (поскольку на данный момент существует всего 2 модели дисковых хардварных плейеров и 1 сетевое медиа-устройство, способное полноценно воспроизводить контейнер MKV), то можно рекомендовать переводить, по крайней мере видео в контейнере AVI, в MKV. Хотя-бы потому, что синхронизация звука и изображения при нехватке процессорной мощности и других внешних факторах в MKV получше особенно при нескольких звуковых дорожках. Плюс ещё несколько положительных факторов. Уже несколько раз я натыкался на AVI-файлы решительно не желающие нормально проигрываться на некоторых видео-плейерах (в частности на моём любимом KMplayer), пара минут на смену контейнера AVI на MKV и они полностью избавлялись от своих недугов. Итак, что для этого нужно проделать:

1. Запускаем программу и нажав на кнопку add, возле верхнего окна на первой закладке Input, загружаем в неё файл фильма в поддерживаемом программой входящем формате (MP4, AVI, MPEG, MOV, OGG, RM, RMVB) 



2. В окне Tracks выбираем нужную (если их, звуковых дорожек в 'перекодируемом' формате, несколько) дорожку и, при необходимости, используя кнопку up справа от этого окна передвигаем её на 2-ю позицию в списке (на первом видео-дорожка). Это вовсе не необходимо, но желательно. Затем ниже на закладке General track options, в списке выбора Default track flag выбираете yes (если такой флаг был ранее установлен для другой аудио-дорожки, он автоматически снимется, вручную делать этого не надо); 



3. Если нужно проделываем аналогичную операцию для дорожек с субтитрами (ежели таковые оказались в исходном контейнере), выставив Default flag в yes для нужной дорожки с сабами. Передвигать её, если вы решите это сделать, нужно уже на 3-ю позицию в общем списке. Но для дорожек с субтитрами эта операция врятли необходима;
4. Ну и далее, как обычно, в строке Output filename указываем, куда положить получающийся фильм (и как его назвать).
5. Нажимаем на Start muxing и, если не было допущено никаких ошибок (например попытка записать получаемый файл в то-же место и под тем-же именем, что и исходный), ждём окончания процесса перепаковки контейнера.
6. Получаем тот-же фильм, но уже в контейнере MKV
7. Обязательно проверяем полученный результат (не дай бог удалите исходный материал, а потом выяснится, что вышло немного не то, что ожидалось)
Категория: Мои файлы | Добавил: elaz
Просмотров: 4202 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]