问题:
有很多视频文件只能用自定义播放器播放,我想对其进行逆向工程,以便可以在常见的媒体播放器(如 VLC 或 MPC)上播放视频。
我迄今为止的发现:
探测这些文件后发现,它们是 EBML 类型,由Matroska Media 容器。
因此我将文件扩展名改为 .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
... 流#0:0(eng):音频:h264(高),0 个通道(默认)流#0:1(eng):视频:ac3,无,192 kb/s,31.25 fps,31.25 tbr,1k tbn,1k tbc(默认)
疑虑:
是否可以编辑 Matroska 容器并更改媒体轨道的“轨道类型”标签?
是否可以使用ffmpeg为视频和音轨指定正确的输入编解码器,并提取它们(最好不要重新编码)?
答案1
我无法提交任何 EBML 编辑器或 Matroska Media 容器编辑器来让我轻松更改 Matroska 文件中“轨道类型”的值。
因此只能使用十六进制编辑器直接编辑二进制文件。如果没有 MKVToolNix,这将是一项耗时的任务。MKVToolNix信息工具现在包括在 Matroska 文件中指定数据(标签)位置的巧妙功能!
据其称“曲目类型:音频“位于位置 414 并且”曲目类型: 视频“位于 Matroska 文件中的位置 532。
MKVToolNix信息视图的截图:
在十六进制编辑器中打开该文件后(试用版Synalyze It! Pro对于 macOS),只需在 MKVToolNixInfo 指向的位置搜索数据即可。截图:
我们发现位置 414 包含数据83 81 02
(声音的- 对于标签“轨道类型”) 且位置 532 包含数据83 81 01
(视频- 对于标签“轨道类型”)所以我们只需要互换和替换这些数据即可。