长期以来,我梦想在我的音乐库中拥有歌曲的 lastfm 标签,这样我就可以使用它们快速生成播放列表。
在 amarok 1.4 中曾经有一种方法可以实现这一点,但是它一直不稳定。
然后是 MusicBrainz Picard 的 lastfm/lastfmplus 插件。部分功能还不错,但我无法让它只查找 lastfm 标签并将它们放入评论/流派/其他内容中,但它总是必须标记所有内容。而且它并不是特别好用,尤其是对于小乐队、没有专辑的歌曲等。
我的音乐库组织得相当好。大多数标签都是正确的。我也有一些没有专辑的歌曲。我不想让它找到那些歌曲的专辑,因为这会弄乱我的专辑视图。所以它一定不能触及曲目名称、曲目编号、艺术家和专辑字段。我只希望最受欢迎的 lastfm 标签进入 mp3 的流派或评论标签,用分号、逗号或其他任何符号分隔。
我想我记得有一个完成这项工作的脚本,但我找不到。
有人知道是否有类似的东西吗?编写这个会很难吗,例如作为 Banshee 插件?
谢谢
答案1
我快速编写了一个 Python 脚本。你可以在这里查看它:http://db.tt/yGa14ZA或从这里下载:http://db.tt/Rnkhpod
据我所知,您的音乐库是 MP3 格式,所以我使用了 ID3 标记器。脚本会获取 last.fm 热门标签并将其放入 COMMENT 标签中。
如果您问我,虽然“TopTags”比“TrackTags”更有意义,但它们可能包含大量垃圾
脚本使用标准 Python 库,除了写入标签的模块 - eyeD3 (sudo apt-get install python-eyed3)
使用示例(解析当前文件夹中的所有文件):
$ for f in *.mp3 ; do python lastfm_top-tags.py "$f" ; done
类似的 bash 行也可以爬取所有子文件夹。
希望有用:)
答案2
上面提到的 bash 脚本对我来说很管用 - 但我该如何使用它自动递归遍历我的子目录?我的子目录和文件中也有空格 - 那么当文件名中有空格时我该如何编写脚本呢?
我四处搜索,并用以下代码包装它:
current_directory=$(pwd)
mp3_files=$(find "${current_directory}" -type f -iname "*.mp3")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
IFS=$'\n'
for mp3_file in ${mp3_files}; do
python /home/bruce/lastfm_top-tags.py "$f" ;
done
但我认为事实并非如此。
答案3
使脚本可执行并像这样运行它:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $(find ./ -type f -iname "*.mp3")
do
lastfm_top-tags.py
# or use this : python $HOME/bin/lastfm_top-tags.py "$f" ;
done
IFS=$SAVEIFS