如何使用 metaflac 管理音乐标签

使用这个强大的开源实用程序,从命令行更正音乐标签错误。
155 位读者喜欢这个。

长期以来,我一直在将 CD 翻录到我的电脑中。在这段时间里,我使用过几种不同的翻录工具,我观察到每种工具似乎对标签都有不同的理解,特别是,要用音乐数据保存哪些元数据。我说的“观察到”是指,音乐播放器似乎以一种奇怪的顺序对专辑进行排序,它们将一个物理目录中的曲目分成两个专辑,或者它们会产生其他令人沮丧的恼人之处。

我还了解到,有些标签非常晦涩难懂,许多音乐播放器和标签编辑器都不会显示它们。即便如此,它们也可能会在某些极端情况下使用它们进行排序或显示音乐,例如,播放器将所有包含标签 XYZ 的音乐文件与所有不包含该标签的文件分隔到不同的专辑中。

因此,如果标签应用程序和音乐播放器不显示“怪异”标签——但却以某种方式受到它们的影响——你能做什么呢?

Metaflac 来解救了!

我一直想熟悉 metaflac,这是 FLAC 文件的开源命令行元数据编辑器,FLAC 文件是我选择的开源音乐文件格式。并不是说像 EasyTAG 这样出色的标签编辑软件有什么问题,但俗话说“如果你只有一把锤子……”就会浮现在脑海中。此外,从实际角度来看,我的家庭和办公室立体声音响的音乐需求由运行 ArmbianMPD 的小型专用服务器来满足,音乐文件本地存储,运行非常精简的、仅音乐的无头环境,因此命令行元数据管理工具将非常有用。

下面的屏幕截图显示了我的长期翻录程序造成的典型问题:Putumayo 精彩的哥伦比亚音乐合辑显示为两个独立的专辑,一个包含单曲,另一个包含剩余的 11 首歌曲

Album with incorrect tags

我使用 metaflac 生成了一个列表,其中包含包含这些曲目的目录中所有 FLAC 文件的所有标签

rm -f tags.txt
for f in *.flac; do
	echo $f >> tags.txt
	metaflac --export-tags-to=tags.tmp "$f"
	cat tags.tmp >> tags.txt
	rm tags.tmp
done

我将其保存为可执行 shell 脚本(请参阅我的同事 David Both 关于 Bash shell 脚本的精彩专栏系列,特别是关于循环的那一篇)。基本上,我在这里所做的是创建一个文件 tags.txt,其中包含文件名(echo 命令),后跟其所有标志,然后是下一个文件名,依此类推。以下是结果的前几行

A Guapi.flac
TITLE=A Guapi
ARTIST=Grupo Bahia
ALBUMARTIST=Various Artists
ALBUM=Putumayo Presents: Colombia
DATE=2001
TRACKTOTAL=12
GENRE=Latin Salsa
MUSICBRAINZ_ALBUMARTISTID=89ad4ac3-39f7-470e-963a-56509c546377
MUSICBRAINZ_ALBUMID=6e096386-1655-4781-967d-f4e32defb0a3
MUSICBRAINZ_ARTISTID=2993268d-feb6-4759-b497-a3ef76936671
DISCID=900a920c
ARTISTSORT=Grupo Bahia
MUSICBRAINZ_DISCID=RwEPU0UpVVR9iMP_nJexZjc_JCc-
COMPILATION=1
MUSICBRAINZ_TRACKID=8a067685-8707-48ff-9040-6a4df4d5b0ff
ALBUMARTISTSORT=50 de Joselito, Los
Cumbia Del Caribe.flac

经过一番调查,结果证明我同时翻录了许多 Putumayo CD,而且我当时使用的任何软件似乎都在除一个文件外的所有文件上都放置了 MUSICBRAINZ_ 标签。(一个错误?很可能;我在大约六张专辑中看到了这种情况。)此外,关于有时不寻常的排序,请注意 ALBUMARTISTSORT 标签将西班牙语冠词“Los”移到了艺术家姓名的末尾,逗号之后。

我使用一个简单的 awk 脚本来列出 tags.txt 文件中报告的所有标签

awk -F= 'index($0,"=") > 0 {print $1}' tags.txt | sort -u

这使用 = 作为字段分隔符将所有行拆分为字段,并打印包含等号的行的第一个字段。结果通过带有 -u 标志的 sort 传递,这消除了输出中的所有重复项(请参阅我的同事 Seth Kenlon 的关于 sort 实用程序的精彩文章)。对于这个特定的 tags.txt 文件,输出是

ALBUM
ALBUMARTIST
ALBUMARTISTSORT
ARTIST
ARTISTSORT
COMPILATION
DATE
DISCID
GENRE
MUSICBRAINZ_ALBUMARTISTID
MUSICBRAINZ_ALBUMID
MUSICBRAINZ_ARTISTID
MUSICBRAINZ_DISCID
MUSICBRAINZ_TRACKID
TITLE
TRACKTOTAL

稍微调查了一下,我发现 MUSICBRAINZ_ 标志出现在除一个 FLAC 文件之外的所有文件上,所以我使用 metaflac 命令删除了这些标志

for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMARTISTID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ARTISTID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_DISCID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_TRACKID "$f"; done

完成之后,我可以使用我的音乐播放器重建 MPD 数据库。以下是结果

Album with correct tags

瞧,所有 12 首曲目都在一张专辑中。

所以,是的,我非常喜欢 metaflac。我希望在我尝试解决我的音乐收藏的音乐标签中最后一点怪异之处时,我会更频繁地使用它。强烈推荐!

还有音乐

我花了几个晚上收听 CBC Music 上 Odario Williams 的节目 After Dark。(CBC 是加拿大公共广播公司。)感谢 Odario,我真正开始欣赏的专辑之一是 Kevin Fox 的Songs for Cello and Voice。这是他的翻唱 Eurythmics 的歌曲“Sweet Dreams (Are Made of This)”。

我在 CD 上购买了这张专辑,现在它在我的音乐服务器上,标签已正确组织!

接下来阅读什么
Chris Hermansen portrait Temuco Chile
自从 1978 年从不列颠哥伦比亚大学毕业以来,我几乎一直都离不开电脑,自 2005 年以来,我一直是全职 Linux 用户,从 1986 年到 2005 年,我一直是全职 Solaris 和 SunOS 用户,在此之前,我是 UNIX System V 用户。

2 条评论

嗨 Chris,一如既往感谢您清晰而详细的见解!

这篇文章和您去年发布的题为“WAV 文件真的比 FLAC 更好吗?”的文章都与我消费音乐的方式息息相关。

我想知道像 XLD 这样的转换应用程序在转换文件时自动“降采样”方面的立场如何(我在程序的首选项中看不到任何相关信息)。虽然 XLD 在转换无损文件时保留标签等显然非常方便,但如果您认为音频质量会因 XLD 而受到影响,我将毫不犹豫地切换到您推荐的其他方法之一。

谢谢,
Mike

Mike,感谢您的友好评论。我看了一下 XLD;我了解到它仅适用于 Mac 电脑,因此对我来说几乎不可能使用(在我生命的这个阶段,我只使用 Linux)。我看到提供了源代码,但我找不到许可证文件,因此我不确定使用条款。

与其查看源代码并根据此提供半知半解的意见(这可能不太可靠),我建议您尝试在您感兴趣的格式之间进行转换,然后查看转换后的格式。在 Linux 中,您可以使用“file”命令检查格式,如下所示

me@mydesktop:~/Music/The Fabulous Thunderbirds/Strong Like That (FLAC 96.0 kHz 24-bit)$ file *Smooth*
01-05 Smooth (FLAC 96.0 kHz 24-bit).flac: FLAC 音频比特流数据,24 位,立体声,96 kHz,23919360 个采样
me@mydesktop:~/Music/The Fabulous Thunderbirds/Strong Like That (FLAC 96.0 kHz 24-bit)$

我猜 OSX 的终端中有一个“file”命令可用。

话虽如此,我遇到过一种情况,“file”声称文件是 96/24,但实际上该文件实际上是 96/16(根据销售文件的供应商的说法,这是一种奇怪的生产错误)。因此,另一种检查方法是使用音乐播放器,它可以立即了解比特率——例如 Guayadeque。上面 The Fabulous Thunderbirds 的示例显示比特率约为 3200kbps;我提到的 96/16 专辑显示比特率约为 1200kbps。

当我需要转换文件时(在我的情况下,始终是将 WAV 转换为 FLAC;由于某种原因,一些供应商喜欢运送 WAV,尤其是对于高分辨率文件),通常我使用一个名为“soundconverter”的 GNOME 实用程序

https://soundconverter.org/

这可能对您在 OSX 中没有帮助。两个命令行选项是“flac”和“ffmpeg”。我偶尔使用 flac;我发现 ffmpeg 默认情况下喜欢降采样,尽管可以使用其命令行参数来避免这种情况。根据我的经验,“soundconverter”和“flac”默认都不会降采样。

另一种可能性是 “sox” http://sox.sourceforge.net/,我尝试过并且非常喜欢。但请注意,“sox”提供了大量选项,浏览它们可能会让人感到有些望而生畏。sox 有一个 OSX 版本。

我希望这有帮助!

回复 作者 kolomana

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.