Sortieren einer Musikbibliothek nach BPM

440
Adrien MORIN

Ich verwende ein Tool namens bpm-tag, das eine mp3-Datei ("myfile.mp3") als Eingabe und Ausgänge "myfile.mp3: XX.XXX BPM" verwendet. Ich möchte ein Skript ausführen, das meine Musikbibliothek durchläuft, die BPM jedes Songs berechnet und in ein Verzeichnis entsprechend seiner BPM verschiebt (z. B. das Verzeichnis "Slow" für <80 BPM usw.). Ich habe eine vage Idee, wie man das macht, aber ich weiß nicht, wie man die Ausgabe des BPM-Tags analysiert, um den BPM-Wert zu erhalten.

Irgendwelche Vorschläge ?

1
SU ist kein Skriptschreibservice - aber einige von uns sind bereit und in der Lage zu helfen, wenn Sie beim Verfassen Ihres eigenen Dokuments nicht weiterkommen. Was hast du bis jetzt Wenn Sie den "BPM" -Wert für eine Datei erhalten möchten, können Sie BPM = $ (bpm-Tag myfile.mp3 | cut -f2 -d "") ausführen, wodurch der BPM in eine Variable $ BPM gesetzt wird davidgo vor 6 Jahren 4
Ich wusste nicht über Sed und Cut, bis Sie sie erwähnten; Danke dir. Ich habe herausgefunden, wie ich mein Skript schreibe. Soll ich es als Antwort beifügen? Adrien MORIN vor 6 Jahren 2
Es wäre sicherlich hilfreich, wenn Sie dies tun würden. =) Anaksunaman vor 6 Jahren 0

1 Antwort auf die Frage

2
Adrien MORIN

Hier ist was ich getan habe. Es schien zu funktionieren (aber leider war der bpm-tag für viele Songs nicht genau genug).

#!/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) 

Hier machen

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

druckt alle Dateien (-type f) mit der Endung .mp3 (-name '* .mp3'), die sich im Ordner oder in einem seiner Unterordner befinden. Wie ich es verstehe, sind die Optionen -print0 und -r -d '' für Formatierungszwecke, aber ich verstehe nicht wirklich, wie es funktioniert.