Сортировка музыкальной библиотеки по BPM

Сортировка музыкальной библиотеки по BPM

Я использую инструмент под названием bpm-tag, который принимает mp3-файл ("myfile.mp3") в качестве входных данных и выводит "myfile.mp3: XX.XXX BPM". Я хотел бы запустить скрипт, который проходит по моей музыкальной библиотеке, вычисляет BPM каждой песни и перемещает ее в каталог в соответствии с ее BPM (например, каталог "Slow" для <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)

печатает все файлы (-type f), заканчивающиеся на .mp3 (-name '*.mp3'), которые находятся в папке или одной из ее подпапок. Насколько я понимаю, параметры -print0 и -r -d '' предназначены для форматирования, но я не совсем понимаю, как это работает.

Связанный контент