Проблема:
Есть куча видеофайлов, которые можно воспроизвести только с помощью специального проигрывателя, и я хотел бы провести их обратную разработку, чтобы видео можно было воспроизводить на обычных медиаплеерах (например, VLC или MPC).
Что я обнаружил на данный момент:
Проверка файлов показала, что они относятся к типу EBML, который используетсяКонтейнеры Matroska Media.
Поэтому я изменил расширение файла на .mkv и дополнительно проверил файл с помощьюMKVToolNixиFFMPEG.
MKVToolNixВ ходе проверки было обнаружено, что видеодорожка закодирована с помощью h.264, а звуковая дорожка закодирована с помощью AC3.
Но звуковая дорожка была «помечена» как видео, а видеодорожка — как аудио, путем намеренного изменения тега «тип дорожки».
MKVToolNixСкриншот информации о треке:
- FFMPEGтакже подтверждает то же самое:
[matroska,webm @ 0x7f966c800a00] Не удалось открыть кодек в avformat_find_stream_info
[h264 @ 0x7f966c811a00] Несоответствия типа или идентификатора кодека
[ac3 @ 0x7f966c812600] Несоответствия типа или идентификатора кодека[matroska,webm @ 0x7f966c800a00] Не удалось найти параметры кодека для потока 0 (Аудио: h264 (Высокий), 0 каналов): неуказанная частота дискретизации. Рассмотрите возможность увеличения значений параметров «analyzeduration» и «probesize».
[matroska,webm @ 0x7f966c800a00] Не удалось найти параметры кодека для потока 1 (Видео: ac3, нет, 192 кбит/с): неуказанный размер. Рассмотрите возможность увеличения значений параметров «analyzeduration» и «probesize».
(отредактировано)
Продолжительность: 01:46:42.00, начало: 0.035000, битрейт: 2629 кбит/с
... Поток №0:0(eng): Аудио: h264 (High), 0 каналов (по умолчанию)Поток #0:1(eng): Видео: ac3, none, 192 кбит/с, 31,25 кадр/с, 31,25 tbr, 1k tbn, 1k tbc (по умолчанию)
Сомнения:
Можно ли редактировать контейнер Matroska и изменять тег «тип трека» медиа-треков?
Можно ли использоватьffmpegуказать правильный входной кодек для видео- и аудиодорожки и извлечь их (желательно без перекодирования)?
решение1
Я не смог найти ни одного редактора EBML или редактора контейнеров Matroska Media, который позволил бы мне легко изменять значения «типа дорожки» в файлах Matroska.
Поэтому пришлось использовать Hex Editor для редактирования бинарных файлов напрямую. Это было бы трудоемкой задачей, если бы не MKVToolNix.MKVToolNix Информационный инструменттеперь включает в себя удобную функцию указания положения данных (тега) в файле Matroska!
Согласно этому "Тип трека: аудио" находится в позиции 414 и "Тип трека: видео" находится на позиции 532 в файле Matroska.
Скриншот информационного представления MKVToolNix:
После открытия файла в шестнадцатеричном редакторе (пробная версияSynalyze It! Proдля macOS) просто найдите данные в позиции, на которую указывает MKVToolNix Info. Скриншот:
Мы обнаруживаем, что позиция 414 содержит данные 83 81 02
(аудио- для тега«Тип пути») и позиция 532 имеет данные 83 81 01
(видео- для тега«Тип пути»). Поэтому нам просто нужно поменять местами и заменить эти данные.