我从[来源]得知,FLAC 计算 CRC 和 MD5。
恐怕flac --test
只有 CRC 测试 - 如man flac
:中所述same as -d except no decoded file is written
。
如何使用给定 .flac 文件中 STREAMINFO 中放置的原始 PCM 的 MD5 检查 flac 文件的正确性?
如果flac --test
可以的话,是否有任何可靠的(如 flac 文档中的)参考资料可以显示它?
资料来源:
http://en.wikipedia.org/wiki/Free_Lossless_Audio_Codec我们可以找:
FLAC 在流协议中使用时使用 CRC 校验和来识别损坏的帧,并且还在其 STREAMINFO 元数据标头中存储原始 PCM 音频的完整 MD5 哈希值。
http://flac.sourceforge.net/comparison.html
默认情况下,处理文件时,flac 在编码和解码时计算 MD5 和。
要在 STEAMINFO 中查看 md5sums,我们可以使用:
$ metaflac --show-md5sum *.flac
答案1
最可靠的来源是源代码本身,它确实建议默认检查存储在 STREAMINFO 中的 MD5。
答案2
http://wiki.etree.org/index.php?page=FlacFingerprint显示此信息:
相反,当您解压缩或使用 flac 的测试功能时,FLAC 会根据文件中存储的内部校验和自动验证每个文件。
请注意,flac 指纹不是编码的 flac 数据的校验和 - 它是解码的音乐数据的校验和。因此,为了测试文件,flac 会对文件中的数据进行解码,并验证音乐数据的校验和是否与(内部存储的)flac 指纹匹配。
这有一些有趣的含义:
当 flac 解码时,它会根据内部校验和数据检查文件(以及文件的每个部分)。如果 flac 文件解码没有错误,那么它就是一个好文件 - 只要您使用的应用程序报告解码错误!
这似乎意味着 CRC 和 MD5 都会被检查,因为 CRC 仅适用于帧。我做了一些测试并得到了2:FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH
,这是预期的。看着代码,以下内容意味着始终会检查它:
/*
* undocumented debugging options for the test suite
*/
{ "no-md5-sum" , share__no_argument, 0, 0 },
并且默认情况下已设置:
FLAC__stream_decoder_set_md5_checking(decoder_session->decoder, true);
设置“MD5 签名检查”标志。如果为 true,则解码器将在解码时计算未编码音频数据的 MD5 签名,并在 FLAC__stream_decoder_finish() 期间将其与 STREAMINFO 块中的签名(如果存在)进行比较。
正如来自的答案发送更多信息表示:
最可靠的来源是源代码本身,它确实建议默认检查存储在 STREAMINFO 中的 MD5。
答案3
这可能会有所帮助。
https://www.quickhash-gui.org/
FLAC 在流协议中使用时使用 CRC 校验和来识别损坏的帧,并且还在其 STREAMINFO 元数据标头中存储原始 PCM 音频的完整 MD5 哈希值。