Как извлечь видео и аудио из поврежденного файла с несовпадением идентификатора кодека (неправильный тип дорожки)?

Как извлечь видео и аудио из поврежденного файла с несовпадением идентификатора кодека (неправильный тип дорожки)?

Проблема:
Есть куча видеофайлов, которые можно воспроизвести только с помощью специального проигрывателя, и я хотел бы провести их обратную разработку, чтобы видео можно было воспроизводить на обычных медиаплеерах (например, VLC или MPC).

Что я обнаружил на данный момент:

  • Проверка файлов показала, что они относятся к типу EBML, который используетсяКонтейнеры Matroska Media.

  • Поэтому я изменил расширение файла на .mkv и дополнительно проверил файл с помощьюMKVToolNixиFFMPEG.

  • MKVToolNixВ ходе проверки было обнаружено, что видеодорожка закодирована с помощью h.264, а звуковая дорожка закодирована с помощью AC3.

  • Но звуковая дорожка была «помечена» как видео, а видеодорожка — как аудио, путем намеренного изменения тега «тип дорожки».

MKVToolNixСкриншот информации о треке:

Скриншот 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 (по умолчанию)

Сомнения:

  1. Можно ли редактировать контейнер Matroska и изменять тег «тип трека» медиа-треков?

  2. Можно ли использоватьffmpegуказать правильный входной кодек для видео- и аудиодорожки и извлечь их (желательно без перекодирования)?

решение1

Я не смог найти ни одного редактора EBML или редактора контейнеров Matroska Media, который позволил бы мне легко изменять значения «типа дорожки» в файлах Matroska.

Поэтому пришлось использовать Hex Editor для редактирования бинарных файлов напрямую. Это было бы трудоемкой задачей, если бы не MKVToolNix.MKVToolNix Информационный инструменттеперь включает в себя удобную функцию указания положения данных (тега) в файле Matroska!

Согласно этому "Тип трека: аудио" находится в позиции 414 и "Тип трека: видео" находится на позиции 532 в файле Matroska.

Скриншот информационного представления MKVToolNix:

снимок экрана MKVToolNix Info View

После открытия файла в шестнадцатеричном редакторе (пробная версияSynalyze It! Proдля macOS) просто найдите данные в позиции, на которую указывает MKVToolNix Info. Скриншот:

скриншот Hex Editor

Мы обнаруживаем, что позиция 414 содержит данные 83 81 02(аудио- для тега«Тип пути») и позиция 532 имеет данные 83 81 01(видео- для тега«Тип пути»). Поэтому нам просто нужно поменять местами и заменить эти данные.

Связанный контент