在本系列中,我正在开发几个脚本来帮助清理我的音乐收藏。 在上一篇文章中,我使用了为分析音乐文件的目录和子目录而创建的框架,并使用优秀的开源 JAudiotagger 库进行了分析,以分析音乐目录和子目录中的音乐文件的标签。 在本文中,我将做一个更简单的工作
- 使用我们在第 1 部分中创建的框架
- 确保每个专辑目录都有一个
cover.jpg
文件 - 记下专辑目录中除了 FLAC、MP3 或 OGG 之外的任何其他文件。
音乐和元数据
如果您还没有阅读本系列的第 1 部分和第 2 部分,请先阅读,以便您了解我的音乐目录的预期结构、该文章中创建的框架以及如何拾取 FLAC、MP3 和 OGG 文件。
还有一件事。大多数音频翻录应用程序和许多下载
- 没有提供有用的
cover.jpg
文件 - 即使它们确实提供了有用的
cover.jpg
文件,它们也不会将媒体文件链接到它 - 携带各种其他用途可疑的文件(例如,
playlist.m3u
,它是由我过去使用的一个标记实用程序创建的)
正如我在上一篇文章中提到的,本系列的最终目标是创建一些有用的脚本,以帮助识别缺失或异常的标签,并促进创建工作计划以解决标记问题。 此特定脚本查找丢失的 cover.jpg
文件和不需要的非媒体文件,并创建一个 CSV 文件,您可以将其加载到 LibreOffice 或 OnlyOffice 中来查找问题。 它不会查看媒体文件本身,也不会查找艺术家子目录中遗留的无关文件(这些是留给读者的练习)。
框架和专辑文件分析
从代码开始。 与以前一样,我已将评论合并到脚本中,这些评论反映了我通常为自己留下的(相对简洁的)“评论笔记”
1 // Define the music library directory
2 def musicLibraryDirName = '/var/lib/mpd/music'
3 // Print the CSV file header
4 println "artist|album|cover|unwanted files"
5 // Iterate over each directory in the music libary directory
6 // These are assumed to be artist directories
7 new File(musicLibraryDirName).eachDir { artistDir ->
8 // Iterate over each directory in the artist directory
9 // These are assumed to be album directories
10 artistDir.eachDir { albumDir ->
11 // Iterate over each file in the album directory
12 // These are assumed to be content or related
13 // (cover.jpg, PDFs with liner notes etc)
14 // Initialize the counter for cover.jpg
15 // and the list for unwanted file names
16 def coverCounter = 0
17 def unwantedFileNames = []
18 albumDir.eachFile { contentFile ->
19 // Analyze the file
20 if (contentFile.name ==~ /.*\.(flac|mp3|ogg)/) {
21 // nothing to do here
22 } else if (contentFile.name == 'cover.jpg') {
23 coverCounter++
24 } else {
25 unwantedFileNames << contentFile.name
26 }
27 }
28 println "${artistDir.name}|${albumDir.name}|$coverCounter|${unwantedFileNames.join(',')}"
29 }
30 }
第 1-2 行定义了音乐文件目录的名称。
第 3-4 行打印 CSV 文件标头。
第 5-13 行来自本文第 1 部分中创建的框架,并深入到专辑子目录。
第 14-17 行设置 cover.jpg
计数器(应该只有零或一)和我们将在其中累积不需要的文件名的空列表。
第 18-27 行分析专辑目录中找到的任何文件
第 20-21 行使用 Groovy 匹配运算符 ==~
和“slashy”正则表达式来检查文件名模式。 没有对这些文件执行任何操作(有关该信息,请参见第 2 部分)。
第 22-23 行计算 cover.jpg
的实例(应该只有零或一)。
第 24-26 行记录任何非媒体、非 cover.jpg
文件的名称,以显示专辑目录中潜在的垃圾或谁知道是什么。
第 28 行打印出艺术家姓名、专辑名称,
就是这样!
运行代码
通常,我按如下方式运行它
$ groovy TagAnalyzer3.groovy > tagAnalysis3.csv
然后我将生成的 CSV 加载到电子表格中。 例如,使用 LibreOffice Calc,转到 表格 菜单,然后选择 从文件插入表格。 出现提示时,将分隔符字符设置为 |
。 在我的例子中,结果如下所示

(Chris Hermansen, CC BY-SA 4.0)
我已按“封面”列的递增顺序对此进行排序,以显示没有 cover.jpg
文件的专辑子目录。 请注意,有些有 cover.png
代替。 我在使用音乐播放器的经验是,至少有些音乐播放器无法很好地播放 PNG 格式的封面图像。
另请注意,其中一些具有 PDF 衬页注释、额外的图像文件、M3U 播放列表等。 在我的下一篇文章中,我将向您展示如何管理一些垃圾。
评论已关闭。