Что такое файл MKV?
MKV (Matroska Video) — это мультимедийный контейнер, аналогичный форматам MOV и AVI, но он поддерживает более одной дорожки аудио и субтитров в одном файле. Файл MKV — это формат мультимедийного контейнера Matroska, используемый для видео. MKV основан на Extensible Binary Meta Language и поддерживает несколько форматов сжатия видео и аудио. Основное различие между MKV и другими видеоформатами заключается в том, что MKV — это контейнер, а не кодек. Файлы MKV сохраняются с расширением .mkv. MKV может включать аудио, видео и субтитры в один файл, даже если эти элементы используют разные типы кодирования. Например, у вас может быть файл MKV, содержащий видео H.264 и MP3 или AAC для аудио. MKV также поддерживает описания, рейтинги, обложки и даже точки глав. Есть несколько ключевых особенностей, благодаря которым MKV ориентирован на будущее. Эти функции включают в себя:
- Поддержка быстрого поиска.
- Возможность выбора различных аудио и видео потоков.
- Поддержка субтитров (жестко и программно).
- Поддержка метаданных, глав и меню.
- Возможность потоковой передачи онлайн.
- Возможность восстановления ошибочных файлов, которые обеспечивают возможность воспроизведения поврежденных файлов.
Краткая история
Файл MKV возник в 2002 году в России. Ведущим разработчиком был Лассе Кярккяйнен, который работал с основателем Matroska Стивом Ломмом и командой программистов. MKV был разработан как проект с открытыми стандартами, что означает, что он имеет открытый исходный код и может использоваться бесплатно. Со временем формат был улучшен и стал основой мультимедийного формата WebM в 2010 году.
Матроска Дизайн
Matroska добавляет в спецификацию EBML следующие ограничения.
- docType заголовка EBML должен быть ‘matroska’.
- Значение EBMLMaxIDLength в заголовке EBML должно быть равно 4.
- EBMLMaxSizeLength EBML Header должен иметь значение от 1 до 8 (включительно).
Все элементы верхнего уровня кодируются 4 октетами.
- Языковые коды: Matroska (версии с 1 по 3) использовала языковые коды, которые могут быть либо трехбуквенной библиографической формой ISO-639-2 (например, «fre» для французского), либо дополнительным кодом страны, например, «fre-ca». “для канадского французского языка. Начиная с Matroska версии 4, для языковых кодов МОЖЕТ использоваться либо ISO 639-2, либо BCP 47, хотя BCP 47 рекомендуется.
- Физические типы: они имеют разное значение как для аудио-, так и для видеофайлов. Например, ChapterPhysicalEquiv = 60 означает (CD / 12” / 10" / 7" / TAPE / MINIDISC / DAT) для аудио и (DVD / VHS / LASERDISC) для видео.
- Структура блока - Заголовок блока: Заголовок блока содержит информацию о номере дорожки, метках времени, типе шнуровки и т. д.
- Lacing: это механизм для экономии места при хранении данных, который обычно используется для небольших блоков данных (кадров). Существует 3 вида шнуровки:
- Xiph: Frame with a size multiple of 255 coded with a 0 at the end of the size. For example, The code for 765 is 255;255;255;0.
- EBML: The frame size is coded as a difference between the previous size and this size. The first size in the lace is unsigned but others use a range shift to get a sign on each value.
- fixed-size: The size remains the same.
- Структура SimpleBlock: она основана на блочной структуре с основным отличием в добавлении флагов Keyframe и Discardable. В остальном все то же самое.
Структура Матроски
Документ Matroska должен состоять как минимум из одного Документа EBML с использованием Типа документа Matroska. Каждый документ EBML должен начинаться с заголовка EBML, за которым следует корневой элемент EBML, определяемый как сегмент. Matroska определяет несколько элементов верхнего уровня, которые могут встречаться в сегменте.
EBML использует систему элементов для составления документа EBML. Ниже приведен список элементов верхнего уровня в файле Matroska:
- EBML-документ: оболочка для всего файла.
- Заголовок EBML: содержит информацию о заголовке файла, например DocType.
- Сегмент: верхний элемент, содержащий все остальные элементы верхнего уровня.
- SeekHead: содержит положение сегментов других элементов верхнего уровня.
- Информация: содержит общую информацию о сегменте.
- Треки: элемент информации верхнего уровня с описанием множества треков.
- Главы: используется для определения основных меню и данных разделов.
- Кластер: элемент верхнего уровня, содержащий блочную структуру.
- Cues: элемент верхнего уровня, содержащий все записи, локальные для сегмента, которые ускоряют поиск доступа.
- Вложения: содержит вложенные файлы.
- Теги: этот элемент содержит метаданные, описывающие Треки, Издания, Главы, Вложения или Сегмент в целом.
В следующей таблице показана структура документа Matroska с большинством элементов, отображаемых в иерархии:
| Заголовок EBML | ||||||
| Сегмент | Искатьголову | Искать | Искать ID | |||
| ИскатьПозицию | ||||||
| Информация | идентификатор сегмента | |||||
| СегментФайлимя | ||||||
| ПредыдущийUID | ||||||
| ПредыдущийИмяФайла | ||||||
| СледующийUID | ||||||
| СледующееИмяФайла | ||||||
| СегментСемейный | ||||||
| ГлаваПеревести | ||||||
| Отметка времениШкала | ||||||
| Продолжительность | ||||||
| ДатаUTC | ||||||
| Название | ||||||
| MuxingApp | ||||||
| Приложение для письма | ||||||
| Треки | Отслеживание | номер дорожки | ||||
| TrackUID | ||||||
| Тип трека | ||||||
| Имя | ||||||
| Язык | ||||||
| ID кодека | ||||||
| КодекЧастный | ||||||
| ИмяКодека | ||||||
| Видео | ПометитьЧересстрочная | |||||
| Порядок полей | ||||||
| Стереорежим | ||||||
| Альфа-режим | ||||||
| ПиксельШирина | ||||||
| ПиксельВысота | ||||||
| Ширина дисплея | ||||||
| Высота дисплея | ||||||
| Тип соотношения сторон | ||||||
| Цвет | ||||||
| Аудио | Частота дискретизации | |||||
| Каналы | ||||||
| Битовая глубина | ||||||
| Главы | ИзданиеЗапись | EditionUID | ||||
| ИзданиеFlagСкрытый | ||||||
| EditionFlagDefault | ||||||
| ИзданиеФлагЗаказано | ||||||
| ГлаваАтом | ГлаваUID | |||||
| UID_строки_раздела | ||||||
| ГлаваВремяНачало | ||||||
| ГлаваВремяКонец | ||||||
| ГлаваФлагСкрытый | ||||||
| ГлаваДисплей | Чапстринг | |||||
| ГлаваЯзык | ||||||
| Кластер | Отметка времени | |||||
| Сайленттрекс | ||||||
| Позиция | ||||||
| ПредыдущийРазмер | ||||||
| простой блок | ||||||
| БлокГрупп | ||||||
| Зашифрованный блок | ||||||
| Подсказки | ключевая точка | CueTime | ||||
| CueTrackPositions | ||||||
| Вложения | Прикрепленный файл | Описание файла | ||||
| ИмяФайла | ||||||
| FileMimeType | ||||||
| ФайлUID | ||||||
| ФайлРеферал | ||||||
| FileUsedStartTime | ||||||
| FileUsedEndTime | ||||||
| Теги | Тег | Цели | таргеттипевалуе | |||
| Тип цели | ||||||
| TagTrackUID | ||||||
| TagEditionUID | ||||||
| TagChapterUID | ||||||
| TagAttachmentUID | ||||||
| простой тег | Имя тега | |||||
| Язык тегов | ||||||
| ТегПо умолчанию | ||||||
| ТегСтрока | ||||||
| ТегДвоичный | ||||||
| простой тег |
Использование кодеков
Если вам не нужен новый медиаплеер и вы предпочитаете использовать существующий плеер, вам потребуется установить некоторые кодеки (сокращение от сжатия/распаковки). Несмотря на то, что загрузка кодеков является допустимым вариантом, вы должны быть осторожны с источником, который может содержать вредоносное ПО.