按 BPM 对音乐库进行排序

按 BPM 对音乐库进行排序

我正在使用一个名为 bpm-tag 的工具,它以 mp3 文件(“myfile.mp3”)作为输入并输出“myfile.mp3:XX.XXX BPM”。我想运行一个脚本,遍历我的音乐库,计算每首歌曲的 BPM,并根据其 BPM 将其移动到目录(例如,<80 BPM 的目录“Slow”等)。我有一个模糊的想法,但我不知道如何解析 bpm-tag 的输出以获取 BPM 的值。

有什么建议 ?

答案1

这是我所做的。它似乎有效(但遗憾的是 bpm-tag 对许多歌曲来说不够准确...)。

#!/bin/bash

cd /path/to/my/library

while IFS= read -r -d '' FILE; do
    BPM=$(bpm-tag -f -n "$FILE" 2>&1 | sed "s/.mp3:/%/" | cut -d'%' -f2 | sed "s/ BPM//" | sed "s/^ //" | cut -d'.' -f1) 
#bpm-tag has its output in stderr, so I use 2>&1 to redirect it to stdout, then format it with sed and cut
    if [ "$BPM" -le 130 ]
        then cp "$FILE" /path/to/my/library/Slow/
    elif [ "$BPM" -le 180 ]
        then cp "$FILE" /path/to/my/library/Medium/
    else cp "$FILE" /path/to/my/library/Fast/
    fi
done < <(find . -type f -name '*.mp3' -print0)

在这里做

while IFS= read -r -d '' FILE; do
    echo "$FILE"
done < <(find . -type f -name '*.mp3' -print0)

打印文件夹或其子文件夹中所有以 .mp3 (-name '*.mp3') 结尾的文件 (-type f)。据我了解,-print0 和 -r -d '' 选项用于格式化目的,但我不太明白它是如何工作的。

相关内容