Nerdblog.pl - IDv3, MP3, zabawa z nazwami plików

Reklama na blogach - Blogvertising.pl

IDv3, MP3, zabawa z nazwami plików

Dodano: 17.06.2008

Ściągając ostatnio najpierw płytę Beefy'ego - Tube Technology, a później MC Plus+'a - Chip Hop (polecam obie) zauważyłem nieprzyjemny nawyk autorów - piosenki są co prawda ponumerowane na stronie, ale po ściągnięciu ich np za pomocą dTa otrzymujemy mieszankę - numery tagów nie są wpisane w nazwę pliku. Jako iż zawsze słucham muzyki albumowo, taka sytuacja była dla mnie niedopuszczalna.

Postanowiłem zaprząc BASHa do pracy. Zacząłem od sprawdzenia zwrotu polecenia id3:

d4rky@colossus:~/mcplus+/chiphop$ id3 -l "MC Plus+ - Chip Hop - Still Hustlin'.mp3"
MC Plus+ - Chip Hop - Still Hustlin'.mp3:
Title  : Still Hustlin'                  Artist: MC Plus+
Album  : Chip Hop                        Year: 2006, Genre: Hip-Hop (7)
Comment: http://www.mcplusplus.com/      Track: 1

Dooobra, ale chcemy tylko numer ścieżki. Wykorzystujemy więc potęgę AWKa i wyciągamy sam numer Tracka:

d4rky@colossus:~/mcplus+/chiphop$ id3 -l "MC Plus+ - Chip Hop - Still Hustlin'.mp3" | awk '/Track: /{print $4}' 
1

Ładnie, ładnie. Teraz tylko przelecieć wszystkie pliki i podoklejać liczbę, prawda? Dla bezpieczeństwa chwilowo tylko wyświetlamy bez robienia zmian:

d4rky@colossus:~/mcplus+/chiphop$ for i in *.mp3; do echo "$(id3 -l "${i}" | awk '/Track: /{print $4}') ${i}"; done | sort -n
1 MC Plus+ - Chip Hop - Still Hustlin'.mp3
2 MC Plus+ - Chip Hop - Ascii Antics.mp3
(...)
16 MC Plus+ - Chip Hop - Man vs. Machine.mp3
17 MC Plus+ - Chip Hop - Shout Outs (Outro).mp3

Trochę nam się zamieszało - bierzemy po kolei wszystkie pliki mp3, sprawdzamy im tagi, wyciąŋamy numer ścieżki i na końcu doklejamy oryginalną nazwę pliku. Taaak, wszystko pięknie i ładnie, prawda?

W życiu ;) Niestety, uparłem się, że chcę piosenki w formacie Artysta - Ścieżka - Płyta - Nazwa. Uwielbiam sobie życie utrudniać ;) Trochę trzeba będzie przebudować całość:

d4rky@colossus:~/mcplus+/chiphop$ for i in *.mp3; do echo "${i}" | sed -e "s/-/- $(id3 -l "${i}"  | awk '/Track: /{print $4}') -/"; done | sort -n
MC Plus+ - 10 - Chip Hop - Syntax and Semantics.mp3
MC Plus+ - 11 - Chip Hop - The Empty Set.mp3
(...)
MC Plus+ - 8 - Chip Hop - MySpace Pimpin'.mp3
MC Plus+ - 9 - Chip Hop - Code Rage.mp3

No.. prawie dobrze ;) Sed zmienia nam pierwszy minus na '- {polecenia wyciągania numeru} -'. Jedyne co nam zostało to te paskudne pojedyńcze liczby. Znacznie ładniej wyglądałoby gdyby przed pojedyńczymi liczbami znajdowało się zero, prawda? Cóż...

d4rky@colossus:~/mcplus+/chiphop$ for i in *.mp3; do echo "${i}" | sed -e "s/-/- $(id3 -l "${i}"  | awk '/Track: /{print $4}' | sed -e "s/^\(.\)$/0\\1/") -/"; done | sort -n

Tak wygląda ostateczny kod. Jest to tzw. oneliner - skrypt w języku interpretowanym (skryptowym) zajmujący dokładnie jedną linijkę. Już wyjaśniam wszystkie fragmenty kodu.

for i in *.mp3; 

Weź wszystkie pliki .mp3 z katalogu

do echo "${i}" \ 

Weź nazwę pliku...

| sed -e "s/-/- \ 

...przepuść przez seda, który zamieni myślnik na ...

$(id3 -l "${i}" |\ 

...wynik polecenia id3, które wyświetla listę tagów...

awk '/Track: /{print $4}' |\ 

...z których wyciągamy sam numer ścieżki...

sed -e "s/^\(.\)$/0\\1/") -/"; 

...i w przypadku pojedyńczej liczby dodajemy na początku zero.

done\ 

Kończmy pętlę.

| sort -n

Sortujemy, żeby ładnie wyglądało.

Ufff ;) To teraz tylko ostatecznie:

d4rky@colossus:~/mcplus+/chiphop$ for i in *.mp3; do mv "${i}" "$(echo "${i}" | sed -e "s/-/- $(id3 -l "${i}"  | awk '/Track: /{print $4}' | sed -e "s/^\(.\)$/0\\1/") -/")"; done

I zrobione :) Podziękowania dla Nerdcore Hip-Hopu za inspirację i Michała Górnego za informację na temat konstrukcji ${zmienna}, $(polecenia) oraz podpowiedzi do seda.

Zablokowane

Reklamy: sklep komputerowy ,

Witam!

O ile rozumiem wartość edukacyjną wpisu (dzięki za wyjaśnienie wszystkiego :) ), o tyle do zabaw w wypełnianie ID3 / zmianę nazw plików ja jednak polecam EasyTaga ;)

Pozdrawiam

17.06.2008, 21:19

MiB – EasyTaga uzywam bardzo czesto do wielu rzeczy, ale chcialem sie troche pobawic konsola w ramach odstresowania ;)

17.06.2008, 21:23

Korzystając z offtopa – EasyTag nie obsługuje wysyłania do CDDB czy po prostu nie udało mi się tej funkcji znaleźć?

18.06.2008, 17:41