코덱 ID 불일치(잘못된 트랙 유형)로 손상된 파일에서 비디오 및 오디오를 추출하는 방법은 무엇입니까?

코덱 ID 불일치(잘못된 트랙 유형)로 손상된 파일에서 비디오 및 오디오를 추출하는 방법은 무엇입니까?

문제:
커스텀 플레이어로만 재생할 수 있는 동영상 파일이 잔뜩 있는데, 해당 동영상을 일반 미디어 플레이어(VLC나 MPC 등)에서도 재생할 수 있도록 리버스 엔지니어링하고 싶습니다.

내가 지금까지 발견한 것:

  • 파일을 조사한 결과 해당 파일은 다음에서 사용하는 EBML 유형인 것으로 나타났습니다.마트로스카 미디어 컨테이너.

  • 그래서 파일 확장자를 .mkv로 변경하고 다음을 사용하여 파일을 추가로 검사했습니다.MKVToolNix그리고FFMPEG.

  • MKVToolNix조사 결과 h.264로 인코딩된 비디오 트랙과 AC3 인코딩으로 인코딩된 오디오 트랙이 있음이 밝혀졌습니다.

  • 그러나 의도적으로 "트랙 유형" 태그를 변경하여 오디오 트랙은 비디오로, 비디오 트랙은 오디오로 "표시"되었습니다.

MKVToolNix트랙 정보 스크린샷:

트랙 정보의 MKVToolNix 스크린샷

  • FFMPEG또한 동일한 내용을 확인합니다.

[matroska,webm @ 0x7f966c800a00] avformat_find_stream_info에서 코덱을 열지 못했습니다.

[h264 @ 0x7f966c811a00] 코덱 유형 또는 ID 불일치
[ac3 @ 0x7f966c812600] 코덱 유형 또는 ID 불일치

[matroska,webm @ 0x7f966c800a00] 스트림 0(오디오: h264(높음), 0개 채널)에 대한 코덱 매개 변수를 찾을 수 없습니다. 지정되지 않은 샘플링 속도 'analyzeduration' 및 'probesize' 옵션의 값을 늘리는 것이 좋습니다.

[matroska,webm @ 0x7f966c800a00] 스트림 1에 대한 코덱 매개 변수를 찾을 수 없습니다(비디오: ac3, 없음, 192kb/s): 지정되지 않은 크기 'analyzeduration' 및 'probesize' 옵션의 값을 늘리는 것이 좋습니다.

(수정됨)

재생 시간: 01:46:42.00, 시작: 0.035000, 비트 전송률: 2629kb/s
... 스트림 #0:0(eng): 오디오: h264(높음), 0채널(기본값)

스트림 #0:1(eng): 비디오: ac3, 없음, 192kb/s, 31.25fps, 31.25tbr, 1k tbn, 1k tbc(기본값)

의심:

  1. Matroska 컨테이너를 편집하고 미디어 트랙의 "트랙 유형" 태그를 변경할 수 있습니까?

  2. 사용이 가능한가요?ffmpeg비디오 및 오디오 트랙 모두에 대해 올바른 입력 코덱을 지정하고 이를 추출하려면(바람직하게는 다시 인코딩하지 않고)?

답변1

Matroska 파일의 "트랙 유형" 값을 쉽게 변경할 수 있는 EBML 편집기나 Matroska Media 컨테이너 편집기를 제출할 수 없습니다.

따라서 Hex Editor를 사용하여 바이너리 파일을 직접 편집하는 것이 가능했습니다. MKVToolNix가 아니었다면 시간이 많이 걸리는 작업이었을 것입니다. 그만큼MKVToolNix 정보 도구이제 Matroska 파일에서 (태그의) 데이터 위치를 지정하는 멋진 기능이 포함되었습니다!

그에 따르면 "트랙 유형: 오디오"는 414번 위치에 있고 "트랙 유형: 비디오"는 Matroska 파일의 위치 532에 있습니다.

MKVToolNix 정보 보기 스크린샷:

MKVToolNix 정보 보기의 스크린샷

16진수 편집기(평가판)에서 파일을 연 후그것을 분석하십시오! 찬성macOS의 경우) MKVToolNix Info가 가리키는 위치에서 데이터를 검색하면 됩니다. 스크린샷:

16진수 편집기 스크린샷

우리는 위치 414에 데이터 83 81 02(오디오- 태그의 경우'트랙 유형') 및 위치 532에는 데이터 83 81 01(동영상- 태그의 경우'트랙 유형'). 따라서 우리는 이 데이터를 교환하고 교체하기만 하면 됩니다.

관련 정보