Como extrair vídeo e áudio de um arquivo corrompido com incompatibilidade de ID de codec (tipo de faixa errado)?

Como extrair vídeo e áudio de um arquivo corrompido com incompatibilidade de ID de codec (tipo de faixa errado)?

O problema:
Há vários arquivos de vídeo que só podem ser reproduzidos com um player personalizado e eu gostaria de fazer engenharia reversa para que o vídeo possa ser reproduzido em players de mídia comuns (como VLC ou MPC).

O que descobri até agora:

  • A investigação dos arquivos revelou que eles são do tipo EBML, que é usado peloContêineres de mídia Matroska.

  • Então mudei a extensão do arquivo para .mkv e examinei melhor o arquivo comMKVToolNixeFFMPEG.

  • MKVToolNixa sondagem revelou que havia uma trilha de vídeo codificada com h.264 e uma trilha de áudio codificada com codificação AC3.

  • Mas a trilha de áudio foi “marcada” como vídeo e a trilha de vídeo como áudio, alterando deliberadamente a tag “tipo de trilha”.

MKVToolNixcaptura de tela das informações da faixa:

Captura de tela do MKVToolNix das informações da faixa

  • FFMPEGtambém confirma o mesmo:

[matroska,webm @ 0x7f966c800a00] Falha ao abrir o codec em avformat_find_stream_info

[h264 @ 0x7f966c811a00] Tipo de codec ou incompatibilidades de ID
[ac3 @ 0x7f966c812600] Tipo de codec ou incompatibilidades de ID

[matroska,webm @ 0x7f966c800a00] Não foi possível encontrar parâmetros de codec para stream 0 (Áudio: h264 (alto), 0 canais): taxa de amostragem não especificada Considere aumentar o valor das opções 'analyzeduration' e 'probesize'

[matroska,webm @ 0x7f966c800a00] Não foi possível encontrar parâmetros de codec para o fluxo 1 (Vídeo: ac3, nenhum, 192 kb/s): tamanho não especificado Considere aumentar o valor das opções 'analyzeduration' e 'probesize'

(redigido)

Duração: 01:46:42,00, início: 0,035000, taxa de bits: 2.629 kb/s
... Stream #0:0(eng): Áudio: h264 (Alto), 0 canais (padrão)

Stream #0:1(eng): Vídeo: ac3, nenhum, 192 kb/s, 31,25 fps, 31,25 tbr, 1k tbn, 1k tbc (padrão)

Dúvidas:

  1. É possível editar o contêiner Matroska e alterar a tag “track type” das trilhas de mídia?

  2. É possível usarffmpegespecificar o codec de entrada correto para a trilha de vídeo e áudio e extraí-los (de preferência sem recodificação)?

Responder1

Não consegui arquivar nenhum editor EBML ou editor de contêiner Matroska Media que me permitisse alterar facilmente os valores do "tipo de faixa" nos arquivos Matroska.

Portanto, tudo se resumia a usar um editor hexadecimal para editar os arquivos binários diretamente. Teria sido uma tarefa demorada se não fosse pelo MKVToolNix. OFerramenta de informações MKVToolNixagora inclui o recurso bacana de especificar a posição dos dados (de uma tag) em um arquivo Matroska!

De acordo com isso "Tipo de faixa: áudio"está localizado na posição 414 e"Tipo de faixa: vídeo"está localizado na posição 532 no arquivo Matroska.

Captura de tela da visualização de informações do MKVToolNix:

captura de tela do MKVToolNix Info View

Depois de abrir o arquivo no editor hexadecimal (versão de teste doSinalise-o! Própara macOS), basta procurar os dados na posição apontada pelo MKVToolNix Info. Captura de tela:

captura de tela do Editor Hexadecimal

Descobrimos que a posição 414 contém os dados 83 81 02(áudio- para a etiqueta'Tipo de trilha') e a posição 532 contém os dados 83 81 01(vídeo- para a etiqueta'Tipo de trilha'). Então só precisamos trocar e substituir esses dados.

informação relacionada