我有一天试过把一首WAV格式无损歌曲压缩成FLAC,然后再把无损歌曲压缩成7z,结果发现FLAC比7z更小。这让我对FLAC有一种印象:这东西貌似能做到把“毫无规律”的数据真正做到“无损”压缩。那么事实上到底是不是这样呢?目前我还不想花时间研究libflac的源码,如果可以的话,我们拿FLAC压缩7z包能不能更好地压缩文件呢?
我准备的实验步骤是这样的:
0x1、找一些需要压缩的文件。
0x2、把这个大文件压缩成7z包,并记录文件大小。
0x3、给它套上一个WAV文件头。(所需工具请到这里下载。)
0x4、压缩成FLAC文件。用GoldWave或foobar2000都行,并记录文件大小。如果文件膨胀了,那说明FLAC不能把7z包压得更小。
0x5、然后再用GoldWave或foobar2000把我们得到的FLAC文件转换回WAV。
0x6、用WinHex把WAV文件的WAV文件头去掉。得到7z包。
0x7、解压7z包。如果解压失败,那说明文件的内容被损失了。
0x1、找一些需要压缩的文件。
我这边正好有一个想要压缩的文件,它是Windows XP Sp3(中文版)的ISO镜像,从msdn.itellyou.cn下载的。
[url=zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso (601.04 MB)]下载地址点此,ed2k链接。zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso[/url]
0x2、把这个大文件压缩成7z包,并记录文件大小。
我使用7z的命令行程序,得到了xpsp3.7z这个文件。压缩命令是7z a xpsp3.7z "zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso"
0x3、给它套上一个WAV文件头。
就像下图这样。
文件没有问题,可以播放。
怎么听都像白噪音。拿GoldWave看频谱图,发现每个频段的音量都是一样的。
0x4、压缩成FLAC文件。
结果发现文件膨胀了……这证明我这个想法好像不行。
0x5、转换回WAV
看到这个波形我吃惊了。。
0x6、用WinHex把WAV文件的WAV文件头去掉。得到7z包。
我居然重新看到了“7z”这个标识!看来FLAC貌似是真的无损,不是骗人的。
0x7、解压7z包。如果解压失败,那说明文件的内容被损失了。
诶?好像哪里不对……
原来是还原的WAV少了3个字节……日
我自己又补回了这3个字节,然后就是这样的:
好像可以解压!
没错了,已经证实,FLAC确实是真正的无损……而且我可以用FLAC去压缩一些比较大的文件。至于它的体积是不是真的会减少我就不知道了。看来7z真是已经到极限了呀。 |