使用 ffmpeg 进行音频 MD5 校验和

Dat*_*ase 3 audio windows mp3 ffmpeg command-line

我在 Windows 下得到这些结果 ( ffmpeg version N-78636-g45d3af9)

\n\n
ffmpeg.exe -i TEST.mp3 -c:a copy -f md5 -\nMD5=cb017003b355c2b39d71e8020bd76f5b\n\nffmpeg.exe -i TEST.mp3 -f md5 -\nMD5=7bbe06733ddc930c8a120bced0f3fad9\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么\xc2\xa0不一样?仅计算音频数据的 MD5 校验和的正确方法是什么?如何让\xc2\xa0MD5=xxxxx.xxxxx只返回字符串( )?

\n

slh*_*hck 5

如果您阅读MD5 复用器的文档,它会说:

默认情况下,在计算哈希之前,音频帧会转换为签名的 16 位原始音频,视频帧会转换为原始视频。

因此,在第二个命令中(不指定任何编解码器选项),这相当于-c:a pcm_s16le, 而在第一个示例中,您保留 MP3 音频比特流。这就是为什么它们有不同的校验和。

正确的方法可能是使用以下命令禁用视频流(例如,如果 MP3 文件包含艺术品)-vn

ffmpeg.exe -i TEST.mp3 -vn -f md5 -
Run Code Online (Sandbox Code Playgroud)

您可以通过重定向 stderr 来禁用其他输出:

ffmpeg.exe -i TEST.mp3 -vn -f md5 - 2>NUL
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,使用/dev/null而不是NUL.

  • 如果 MP3 包含艺术作品,它将被渲染为视频流并用于 MD5 计算,除非您使用“-vn”禁用它。如果您在问题中显示完整的 ffmpeg 输出,我们可以更好地了解它。 (2认同)