Ripping af musik-cd

Publiceret: 6. juni 2020 / Ændret: 7. juni 2020

Der har været en del (længere) pauser i projektet med at rippe mine musik-ce'er. Det medfører at jeg skal genopfriske det hver gang, og det glipper det med at være konsistent. Jeg har derfor samlet noget info og lidt bash-script for at få det på skinner.

De forskellige trin i processen:

Rippe cd med Sound Juicer.
Ændre fil-navne og undgå specialtegn og -bogstaver.
Tilføje tags, cover art mv. med MusicBrainz Picard.
Konvertere til mp3-filer.

Udtrække numre fra cd

Jeg bruger Sound Juicer til at rippe cd og gemme musikken som flac-filer. Det vil sige tabsfri kvalitet, og med mulighed for at gendanne filerne og i princippet lave en ny cd. Prisen er ret store filer, typisk 15-35MB pr. musiknummer. Med nutidens store diske til fornuftige penge anser jeg det ikke for et problem.

Sound Juicer slår disken op på musicbrainz.org og henter navne på de forskellige numre.

Filerne gemmes i et mappe-hierarki albumkunstner/albumtitel og nummer. sporkunstner – titel (dannet ud fra oplysninger fra musicbrainz.org.

Sound Juicer kan også fjerne specialtegn (mellemrum, apostroffer, danske bogstaver mv.) og erstatte dem med en understregning, men det fravælger jeg. Med andre værktøjer kan jeg transskribere danske og andre nationale bogstaver og dermed minimere understregninger i filnavne 😲

Når jeg har rippet en cd kan filnavne se sådan ud med disk-nr. (typisk d1, men i box-pakker/dobbelt kan der f.eks. være d2, d3), spor-nr., spor-kunstner og spor-titel.

The Savage Rose/
└─ Dødens triumf
  ├─ d1t01. The Savage Rose - Byen vågner.flac
  ├─ d1t02. The Savage Rose - De unge elskende.flac
  ├─ d1t03. The Savage Rose - Borgerens død.flac
  ├─ d1t04. The Savage Rose - De to gamle.flac
  ├─ d1t05. The Savage Rose - Bruden pyntes.flac
  ├─ d1t06. The Savage Rose - Bryllup.flac
  ├─ d1t07. The Savage Rose - Soldaternes død.flac
  ├─ d1t08. The Savage Rose - Den døde by - Modebutik plyndres.flac
  └─ d1t09. The Savage Rose - Dear Little Mother.flac

Omdøbning/tilpasning filnavne

Jeg ønsker filnavne med "gode gamle" ASCII-tegn, det vil sige bogstaverne A-Z, tal, understregning, bindestreg, punktum – og uden mellemrum i filnavne. Derved sikres at filerne kan flyttes mellem alle operativsystemer.

Først bruger jeg iconv for at konvertere til ASCII, og med en "oversættelse" af nationale bogstaver som f.eks. æ, ø og å samt f.eks. tyske, spanske og franske bogstaver.

Derefter bruger jeg sed for at fjerne punktum/mellemrum efter disk/spor-nr, og erstatter det med "_-_" og samme adskillelse kommer mellem kunstner og sportitel.

Kombinationen mellemrum-bindestreger-mellemrum i sportitel bliver erstattet med en bindestreg uden mellemrum. Alle mellemrum og specialtegn (f.eks. apostroffer) bliver erstattet med en understregning.

Bemærk: Af uforklarlige årsager (måske en bug), bliver et dobbelt a (dvs. aa i stedet for å) opfattet som et specialtegn og erstattes med en understregning – men de andre danske bogstav-omskrivninger "ae" og "oe" (æ og ø) bibeholdes. De få steder, hvor der er et "aa" i et filnavn, retter jeg manuelt understregningen til aa. Det er f.eks. aktuelt i det viste eksempel med "Dødens triumf".

Efterfølgende linje omdøber alle undermapper og filer i den anførte mappe.

Bemærk: Mappenavnet for de rippede cd'er anføres i find-kommandoen og kommandoen skydes af fra /media/Musik/ — det er for risikabelt blot at bruge et punktum for at køre kommandoen i aktuel mappe. Det vil være træls at skyde kommandoen af fra en forkert mappe!

For at sikre mod navnesammenfald gammel/ny navn og dermed overskrivning af en eksisterende fil bruges argumentet "-n" til mv-kommandoen.

Hvis der er navnesammenfald bliver der udskrevet besked på skærmen, eventuelle meddelelser kan normalt ignoreres. Årsag til meddelelserne kan f.eks. være at filerne allerede opfylder de skitserede regler, f.eks. vil en fil som cover.jpg give en fejlmeddelelse, fordi gammelt og nyt navn bliver det samme.

Hvis kommandoen køres flere gange sker der ikke andet end at der kommer en masse beskeder på skærmen 😲

Der vil altid komme en besked om at "./CD-ripping" ikke kan omdøbes.

Først en "oversættelse" af kommandoen, dernæst selve kommandoen:

Mapperne gennemløbes og dybeste niveau behandles først (-depth) og -execdir er nødvendig for at find kan omdøbe hele hierarkiet inklusive mapper.

For hver enkelt fil/mappe bliver navnet kørt gennem iconv -t ascii//translit for at ændre tegn til ASCII og transkribere nationale bogstaver.

Derefter sørger sed for at danne et nyt navn efter reglerne:
– Punktum og mellemrum efter disk/spor-nummer bliver erstattet med en understreg-bindestreg-understreg.
– Første forekomst af mellemrum-bindestreg-mellemrum bliver erstattet med understreg-bindestreg-understreg.
– Eventuelle andre forekomster af mellemrum-bindestreg-mellemrum bliver erstattet med en enkelt bindestreg.
– Alt andet end bogstaverne A-Z a-z, tallene 0-9, almindelig skråstreg (/), punktum og bindestreg bliver erstattet med en understregning.

I Ubuntu/Linux er en almindelig skråstreg (slash) "/" en del af mappe-stien, hvorimod Windows bruger en backslash "\" i stien, derfor skal en slash bevares!

Til sidst sker der en omdøbning (mv) af filerne.

find ./CD-ripping/ -depth -execdir  bash -c 'newname="$(echo "$1" | iconv -t ascii//translit | sed -e "s/\([0-9]\)\. /\1_-_/;s/ - /_-_/;s/ - /-/g;s/[^A-Za-z0-9\/.-]/_/g;s/ /_/g")"; mv -n "$1" "${newname}"' _ '{}' \;

Samme cd som ovenfor, nu med ændrede filnavne og manuelt indsat aa i "vaagner". Filnavnet er "opdelt" af "_-_" i 3 dele, nemlig disk/spor-nummer, kunstner og nummerets titel.

The_Savage_Rose/
└─ Doedens_triumf
  ├─ d1t01_-_The_Savage_Rose_-_Byen_vaagner.flac
  ├─ d1t02_-_The_Savage_Rose_-_De_unge_elskende.flac
  ├─ d1t03_-_The_Savage_Rose_-_Borgerens_doed.flac
  ├─ d1t04_-_The_Savage_Rose_-_De_to_gamle.flac
  ├─ d1t05_-_The_Savage_Rose_-_Bruden_pyntes.flac
  ├─ d1t06_-_The_Savage_Rose_-_Bryllup.flac
  ├─ d1t07_-_The_Savage_Rose_-_Soldaternes_doed.flac
  ├─ d1t08_-_The_Savage_Rose_-_Den_doede_by-Modebutik_plyndres.flac
  └─ d1t09_-_The_Savage_Rose_-_Dear_Little_Mother.flac