按 BPM 對音樂庫排序

按 BPM 對音樂庫排序

我正在使用一個名為 bpm-tag 的工具,它接受 mp3 檔案(“myfile.mp3”)作為輸入並輸出“myfile.mp3: XX.XXX BPM”。我想運行一個腳本,它會遍歷我的音樂庫,計算每首歌曲的 BPM,並根據其 BPM 將其移動到目錄(例如 <80 BPM 的“慢”目錄等)。我有一個模糊的想法如何做到這一點,但我不知道如何解析 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 '' 選項用於格式化目的,但我並不真正了解它是如何工作的。

相關內容