一段时间以来,我一直在将音乐库中的音质较差的 MP3 文件升级为无损 FLAC。这显然会占用更多存储空间。
包含我的“音乐”目录树的 465 GB 内部磁盘现在已经占据了该驱动器的 95% 以上,因此我不得不想办法节省字节。
在试验随机 FLAC 文件时,我发现我可以ffmpeg
像这样运行:
ffmpeg.exe -i "original.flac" -compression_level 12 "ultra_compressed.flac"
“12”是支持的最大数量,文件大小从:
54 149 070 bytes
到:
48 828 507 bytes
哪一个某物。如果我对所有 FLAC 都这样做,并且它们都得到类似的结果,那么收入就会增加很多。但这似乎“好得令人难以置信”。
我并不怀疑它会让歌曲听起来更糟,因为 FLAC 本身就是无损的。据我所知,它只是使用了更复杂的压缩方法,编码时间更长,解码时间可能也更长。不过,我没发现压缩前后播放的歌曲在静音方面有任何差异。
我还担心这会丢失某些有价值的元数据并重置“创建于”和/或“修改于”时间戳,我以前曾多次使用它们来确定何时获得或导出各种声音/音乐文件。
您能否指出我的想法的漏洞,即通过编写一个脚本来释放存储空间,该脚本会遍历我的音乐目录树中的每个 FLAC 文件,并将它们逐个转换为最大压缩级别?这样做有什么不好吗?
(当磁盘最终坏掉时,我当然会买一个更大的磁盘来替换它,但希望这种情况不会在很长一段时间内发生。另外,我还得考虑所有的备份磁盘,如果我只是“花钱”的话,它们也必须用更大的磁盘替换。再说了,我也没钱可花。)
答案1
就音频质量而言,FLAC 压缩 0 和 12 之间应该没有区别。
从计算上来说,这取决于您打算在哪里听音乐。
更高的压缩率也意味着需要做更多的解压工作。这也可能意味着需要更多的内存用于解压缓冲区等。在电池供电的设备上,这可能意味着更高的 CPU 和 RAM 负载可能意味着您会损失电池寿命。作为一个极端的猜测,在具有低功耗 CPU 的便携式设备上,这可能意味着您的播放时间从 20 小时减少到 15 小时。
如果磁盘空间很昂贵,但您从不担心播放器的电池寿命或 CPU 使用率,那么您会希望获得尽可能高的压缩率。
如果担心电池寿命,那么您可能需要选择更适中的压缩级别,或者根本不压缩。
但是,如果您有足够的空间和耐心,那么您可以同时拥有两者的优势。您可以使用最高压缩率创建主存档库以节省空间,然后当您想要随时随地播放文件时,您可以简单地复制所需的文件,然后使用较低的压缩率重新编码它们。理论上应该没有生成损失,因为它在定义上是一种无损编解码器。
编辑:对于可能考虑将 MP3 转换为 FLAC 的未来用户,这是一个提示。将文件直接从 MP3 转换为 FLAC 几乎毫无用处,因为您一开始就已在转换为 mp3 时丢失了数据。FLAC 可能提供的任何好处在那时都已丢失。您无法收回已被 mp3 编码器丢弃的数据。此答案假设您从高质量源材料(例如原始 CD 或工作室 FLAC 文件)编码 FLAC 文件。
答案2
FLAC 是一种无损压缩格式。顾名思义,无损意味着:没有任何损失。
MP3 格式是一种有损格式。它会删除音频,并尝试在您听不到的频率下执行此操作,以显著减小文件大小,但频率越低,您听到的声音就越多。
使用 FLAC,它仍会删除频率,但这些频率处于人耳无法听到的范围内。这也是为什么 FLAC 文件通常只有 WAVE 文件的一半大小,而 MP3 文件比 WAVE 文件小 10 到 20 倍的原因。此外,MP3 文件将应用 MPEG 压缩,这意味着它会对音频片段进行采样,当它发现听起来几乎相同的类似片段时,它会在任何地方使用相同的片段。如果质量设置足够高,您将听不到与源文件相比的任何差异,但如果您使用频谱分析仪进行比较,您会发现它确实有所不同。
解释一下,因为 FLAC 不应用压缩,所以它保持音频完整,因此,在 FLAC 和 WAVE 之间转换时不会有质量损失,因此,如果您重新编码 FLAC 文件,质量将始终是该文件最差的。因此,如果您之前编码为质量 8,现在重新编码为 12,文件将更大但听起来完全一样。现在,如果您之前的质量为 12,现在再次编码为 12,但现在文件大小更小,那么您绝对可以这样做。
随着时间的推移,FLAC 编码器变得越来越好,能够识别和删除不可审计的频率。
尽管如此,一般的经验法则是,复制的副本越多,情况就越糟糕,而这可能确实发生了。虽然无法审计,但实际上可能会删除一些内容。
我的建议是:这样做,但将输出设置为新文件。然后并排比较两个文件,只要听起来相同,就删除较大的文件。无论如何,差异很小,但不要对一个文件这样做,测试一下,如果可以,就盲目地对所有文件都这样做。我的建议仍然是对每个文件进行测试,或者干脆不测试。在磁盘不断变大的世界里,文件大小并不是一个巨大的差异。
答案3
您能否指出我的想法的漏洞,即通过编写一个脚本来释放存储空间,该脚本会遍历我的音乐目录树中的每个 FLAC 文件,并将它们逐个转换为最大压缩级别?这样做有什么不好吗?
我知道您问的是 FLAC->FLAC 的转换,但由于您实际上遇到了磁盘空间问题,请考虑将它们全部转换为有损音频编解码器,例如 Opus。
我收藏了大量 FLAC 音乐,经过一番研究后,我打算将我的 FLAC 音乐转换为 Opus,使用 96 kbit 的比特率,但即使 90 kbit 听起来也一样。我测试过,虽然 64 kbit 听起来不错,但听起来并不透明(基本上对任何人来说都是如此)。如果您不想费心研究 96 kbit 是否足够,那就选择 112 kbit 或 128 kbit,但您会惊讶地发现 96 kbit 可能绰绰有余/听起来与 FLAC 没什么不同/听起来很透明。
您要脚本吗?这里是:要将 FLAC 转换为 Opus:
find -type f -iname '*.flac' -print0 | parallel -0 opusenc --bitrate 96 {} {.}.opus
要将 FLAC 转换为 FLAC:
find -type f -iname '*.flac' -print0 | parallel -0 ffmpeg -i {} -compression_level 12 {.}-ultra_compressed.flac
在一张 ~489 MB FLAC CD 上进行一次测试-compression_level 12
让我节省了 0.0409%,当然这并不多。