我有一个相当不错的歌曲库,可以从我的 Google 音乐帐户中获取。但是,现在这些歌曲没有结构,只有单个文件夹中的大量歌曲。
有没有一个命令行工具可以读取这些内容,并为我标记/排序?我知道有很多基于 UI 的工具可以做到这一点,但我的服务器是无头的。
答案1
我找到了甜菜,这几乎就是我所期望的。这是一个用 Python 编写的命令行工具,可以为您标记、排序和清理音乐库。插件可能性也相当不错。
答案2
您可以使用外置工具从音乐文件中读取 ID3 标签。然后在脚本中使用此信息重命名/移动文件,使其结构更易读。
$ exiftool Martin_Garrix-Animals_\(Original_Mix\).mp3
ExifTool Version Number : 10.00
File Name : Martin Garrix - Animals (Original Mix).mp3
Directory : .
File Size : 12 MB
File Modification Date/Time : 2014:01:13 11:10:16-02:00
File Access Date/Time : 2016:01:14 10:03:18-02:00
File Inode Change Date/Time : 2015:12:27 00:39:21-02:00
File Permissions : rwxrwxr-x
File Type : MP3
File Type Extension : mp3
MIME Type : audio/mpeg
MPEG Audio Version : 1
Audio Layer : 3
Audio Bitrate : 320 kbps
Sample Rate : 44100
Channel Mode : Joint Stereo
MS Stereo : On
Intensity Stereo : Off
Copyright Flag : True
Original Media : True
Emphasis : None
ID3 Size : 57933
Band : Martin Garrix
Album : Animals
Beats Per Minute : 128
Genre : Progressive House
Track : 1
Year : 2013
User Defined URL : http://www.edmexqlusiv.com/
Picture MIME Type : image/jpeg
Picture Type : Front Cover
Picture Description :
Picture : (Binary data 55457 bytes, use -b option to extract)
Title : Animals (Original Mix)
Artist : Martin Garrix
Comment : Downloaded from
Date/Time Original : 2013
Duration : 0:05:04 (approx)
答案3
我拼凑了这个脚本,它应该可以满足您的要求。它读取当前目录中每个文件的 ID3 标签(cd
首先读取包含所有音乐文件的目录),查找艺术家、专辑和标题标签,然后将文件移动到artist/album/title.extension
,并在必要时创建文件夹结构。
#!/bin/bash
#Install id3 command line tool, if not installed
if [ -z "`dpkg -s id3 | grep 'Status: install'`" ]; then
sudo apt-get install id3
fi
IFS=$'\n'
for f in *; do
#Skip directories
[ -d "$f" ] && continue
tags=($(id3 -l "$f" | sed -re 's/\s{2,}([^:])/\n\1/g' | egrep ':.+'))
for l in ${tags[@]}; do
[ -n "`echo $l | egrep '^Title'`" ] && TITLE="`echo $l | sed -re 's/^.*?: //'`"
[ -n "`echo $l | egrep '^Artist'`" ] && ARTIST="`echo $l | sed -re 's/^.*?: //'`"
[ -n "`echo $l | egrep '^Album'`" ] && ALBUM="`echo $l | sed -re 's/^.*?: //'`"
done
mkdir -p "$ARTIST/$ALBUM"
mv "$f" "$ARTIST/$ALBUM/$TITLE.$(echo $f | sed -re 's/.*\.([^.]*$)/\1/g')"
done
答案4
顺便说一下,我在 repos 中找到了 mussort,它使用命令行执行按 Artist/Album 排序的简单任务。只需在文件夹中输入 mussort . 即可。不过它还会重命名文件并用 _ 替换空格。
更多信息:https://manpages.ubuntu.com/manpages/trusty/man1/mussort.1.html
或者,你可以使用exiftool
:exiftool '-Directory<${Artist;}/${Album;}' "$filepath"