我在 Windows 下得到了这些结果(ffmpeg version N-78636-g45d3af9
)
ffmpeg.exe -i TEST.mp3 -c:a copy -f md5 -
MD5=cb017003b355c2b39d71e8020bd76f5b
ffmpeg.exe -i TEST.mp3 -f md5 -
MD5=7bbe06733ddc930c8a120bced0f3fad9
为什么不同?仅计算音频数据的 MD5 校验和的正确方法是什么?如何让 ffmpegMD5=xxxxx.xxxxx
仅返回字符串 ( )?
答案1
如果你读过文档对于 MD5 多路复用器,它表示:
默认情况下,在计算哈希值之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。
因此,在第二个命令中(未指定任何编解码器选项),这相当于-c:a pcm_s16le
,而在第一个示例中,您保留了 MP3 音频比特流。这就是它们具有不同校验和的原因。
正确的方法可能是使用以下命令禁用视频流(例如,如果 MP3 文件包含艺术作品)-vn
:
ffmpeg.exe -i TEST.mp3 -vn -f md5 -
您可以通过重定向 stderr 来禁用其他输出:
ffmpeg.exe -i TEST.mp3 -vn -f md5 - 2>NUL
在 Linux 上,使用/dev/null
而不是NUL
。