问题:
有一堆视频文件只能用自定义播放器播放,我想对其进行逆向工程,以便视频可以在普通媒体播放器(如 VLC 或 MPC)上播放。
到目前为止我发现了什么:
探测文件显示它们是Matroska Media 容器使用的 EBML 类型。
所以我将文件扩展名更改为 .mkv 并使用MKVToolNix和FFMPEG进一步检查文件。
MKVToolNix探测显示有一个用 h.264 编码的视频轨道和一个用 AC3 编码编码的音轨。
但是通过故意更改“轨道类型”标签,音轨已被“标记”为视频,视频轨道被“标记”为音频。
曲目信息的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,无,192 kb/s):未指定大小考虑增加“analyzeduration”和“probesize”选项的值
(编辑)
持续时间:01:46:42.00,开始:0.035000,比特率:2629 kb/s
... Stream #0:0(eng):音频:h264(高),0 通道(默认)流 #0:1(eng):视频:ac3,无,192 kb/s,31.25 fps,31.25 tbr,1k tbn,1k tbc(默认)
疑问:
是否可以编辑 Matroska 容器并更改媒体轨道的“轨道类型”标签?
是否可以使用ffmpeg为视频和音频轨道指定正确的输入编解码器,并提取它们(最好不重新编码)?
我无法提交任何 EBML 编辑器或 Matroska Media 容器编辑器来让我轻松更改 Matroska 文件中“轨道类型”的值。
所以只能使用十六进制编辑器直接编辑二进制文件。如果没有 MKVToolNix,这将是一项耗时的任务。MKVToolNix 信息工具现在包含指定数据(标签)在 Matroska 文件中的位置的绝妙功能!
根据它,“ Track Type: audio ”位于 Matroska 文件中的位置 414,“ Track Type: video ”位于位置 532。
MKVToolNix 信息视图的屏幕截图:
在十六进制编辑器中打开文件后,搜索MKVToolNix Info指向的位置的数据即可。截屏:
我们发现位置 414 包含数据
83 81 02
(音频- 对于标签“Track Type”),位置 532 包含数据83 81 01
(视频- 对于标签“Track Type”)。所以我们只需要交换和替换这些数据。(向Synalyze It 大声疾呼!适用于 macOS 的 Pro - 我使用的是试用版 - 让十六进制编辑变得如此简单!)