我使用 testdisk 恢复了数十万首 .mp3 歌曲,并在目录中生成了如下结果:
f196833984.mp3
然而,当加载到 Rhythmbox 中时,它们会显示为原始标记。
我想要做的是删除命名并替换为标记信息,并在目录中查看该信息。
这是输出
id3v2 -l f194867904.mp3
来自 id3v2:
> id3v1 tag info for f194867904.mp3:
Title : "Sempre libera" Artist: Anna Netrebko
Album : Rolando Villaz�n / Violetta - Year: 2005, Genre: Classical (32)
Comment: Easy CD-DA Extractor Track: 5
id3v2 tag info for f194867904.mp3:
TIT2 (Title/songname/content description): "Sempre libera"
TPE1 (Lead performer(s)/Soloist(s)): Anna Netrebko
TPE2 (Band/orchestra/accompaniment): Anna Netrebko
TALB (Album/Movie/Show title): Rolando Villazón / Violetta - Arias and Duets from Verdi's La Traviata
TYER (Year): 2005
COMM (Comments): ()[XXX]: Easy CD-DA Extractor
TCON (Content type): Classical (32)
TRCK (Track number/Position in set): 5
多谢。我现在将结果发布为图像,它准确地显示了我所做的事情和结果。最左边的图像是最右边终端中列出的歌曲的文件夹。歌曲去了哪里,我不知道。但它留下了一个,我在打字时很享受它。您可以在 VLC 中看到这一点,如下图所示。
答案1
如果你不喜欢 shell 脚本的想法,我真的很喜欢水坑标签管理我的音乐文件上的标签。你可以根据标签批量重命名文件只需点击几下鼠标。
答案2
我只想用一个for循环迭代目录中的每个文件。
每次迭代都会使用ff探针转储标签,然后grep过滤文本并获取标题和艺术家作为单独变量中的干净文本字符串。
最后将文件重命名为:'Artist - Title.ext'
重要的:将其中一些文件复制到一个新的、单独的(或者空的)目录中。
然后,在对所有这些文件运行脚本之前,对该目录的内容执行任何脚本的测试运行...如果发生意外情况,它可以帮助您避免数据丢失。
例子:
for fN in * ;do
strTags="$(2>&1 ffprobe -loglevel quiet -show_entries format_tags=artist,title "${fN}"|grep 'TAG:.*=.*$')"
strTitle="$(echo "${strTags}"|grep 'TAG:title=.*$')"
strArtist="$(echo "${strTags}"|grep 'TAG:artist=.*$')"
mv "${fN}" "${strArtist:10}"' - '"${strTitle:9}${fN: -4:4}"
done
答案3
在做任何事情之前阅读整篇文章
#!/bin/bash
for file in $(ls $1)
do
line=$(id3v2 -l $file | sed -n '2p')
title=$(echo $line | cut -d '"' -f 2 | sed 's/ /_/g')
artist=$(echo $line | cut -d ':' -f 3 | awk '{$1=$1};1' | sed 's/ /_/g')
mv $1/$file $1/$artist-$title
done
这应该将每个文件重命名为 <艺术家姓名> <歌曲标题>,中间有破折号。
将其另存为某些内容(例如 script.sh),使其可执行(chmod +x script.sh),然后运行它,然后指定目标目录,例如:
./script.sh <target directory>
确保目标目录中只有您要重命名的歌曲
按 Enter 之前请确保语法正确
我只在您发布的示例上对此进行了测试
使用不当可以搞乱你的系统如果这个脚本最终得到一个错误的 ls 调用。为了避免任何其他潜在问题,我建议创建一个新目录,复制大约 5-10 首歌曲,然后在那里运行脚本以验证它是否正常工作并符合您的喜好。
使用风险由您自行承担