以下示例性 FFmpeg 命令采用 MP4 文件,不执行任何重新编码,而只是将输出写入 MKV 文件:
ffmpeg -i input.mp4 -c copy output.mkv
如果我使用两个不同的输出文件运行相同的命令两次:
ffmpeg -i input.mp4 -c copy output1.mkv
ffmpeg -i input.mp4 -c copy output2.mkv
生成的文件将具有不同的校验和:
aa46d308197cb08d71f271c61d5412ad output1.mkv
8b48c3ebdbf2384705fcb78e864d12e3 output2.mkv
如果我将它们转换回 MP4 容器,这种差异就会消失:
ffmpeg -i output1.mkv -c copy output1.mp4
ffmpeg -i output2.mkv -c copy output2.mp4
对于不同的 MKV 输入文件,我为 MP4 输出文件获得相同的校验和:
24e92b3e228db780b5feab14255870e3 output1.mp4
24e92b3e228db780b5feab14255870e3 output2.mp4
很明显视频本身没有被修改,MKV 容器中有一些元数据负责。它是什么数据以及如何防止添加此数据?
Matroska 和 WebM 格式会为轨道分配随机 ID,除非通过添加
-bitexact
来抑制。