Schlagwort-Archive: Auto

Linux-Skript zum Zusammenstellen von Mixed-Musik-CDs

Eine ganze CD zu Hause für das Auto zu kopieren, ist leicht.

Wenn man aber eine CD aus einer zufälligen Auswahl von Songs seiner Festplatte zusammenstellen will, ist man ziemlich aufgeschmissen – Unterstützung seitens Software wie Rythmbox, Brasero o.ä. gibt es dafür leider nicht.

Darum hab ich ein Skript erstellt, welches genau das erledigt, oder besser gesagt, vorbereitet. Es liest alle MP3-Dateien im Verzeichnis „\home\user\Musik“ in eine Tabelle ein und mischt diese kräftig durch. Danach wird ein Verzeichnis („shufflecd.jjjjmmtt-hhmmss“) angelegt, in die so viele Titel kopiert werden, wie auf eine CD passen. Standardmäßig verwende ich 700MB-CDs, der entsprechende Wert kann leicht eingestellt werden.

Dieser Vorgang dauert auf meinem vier Jahre altem Thinkpad weniger als eine Minute.

Ich hatte in meinem Musik-Verzeichnis auch Hörbücher und ähnliches gespeichert. Wer das üblicherweise ebenso hält, sollte die entsprechenden Unterverzeichnisse zumindest bis nach dem Brennen in einen anderen („\home\user\Musi“) verschieben, das ist eine Sache von Sekunden. Auch wenn man z.B. auf den neuen Mix-CDs etwa keine Klassik möchte – einfach schnell verschieben.

Meistens brenne ich gleich drei-vier CD nacheinander – während Brasero die erste CD brennt, laufen schon die nächsten shuffle-Durchgänge.

Leider verweigert WordPress mir das Ablegen des Skripts für den Download („Tut mir leid, aber aus Sicherheitsgründen ist dieser Dateityp nicht erlaubt.“), also müsst Ihr wohl selbst eine leere Datei anlegen.

Edit 19.4.: „shuf“ erledigt das shuffeln automatisch (bei „find“ eingebaut), entsprechend ist der Block „Mischen“ weggefallen.

 

Auf gehts:

#!/bin/bash
#./shufflecd
#

#Erstmal das akutelle Verzeichnis sichern
aktP=${PWD}

#auf Home\User gehen
cd ~

# Kleines Format 650MB-CD
#  682000000
# Standardgröße 700MB-CD
#  735000000 hat noch Luft nach oben, aber 
#  737280000 war in 2 von 8 Fällen zu groß
#  und ergab unvollständig gebrannte CDs
GG=735000000

#Standardzielverzeichnis anlegen
Verz="shufflecd.$(date +%Y%m%d-%H%M%S)"
#echo ${Verz}
mkdir ${Verz}

#Standardquellverzeichnis für die Suche ist ~/Musik
cd ~/Musik

#alle Unterordner-mp3s gemischt (geSHUFfelt) ausgeben
find . -name "*.mp3" | shuf --output=shuffle.txt

#Datei in ein Array ausgeben
IFS=$'\n\t' Songs=( $(cat shuffle.txt) )
IFS=$'\n\t' Zufal=( $(cat shuffle.txt) )
IFS=$'\n\t' Groes=( $(cat shuffle.txt) )
unset IFS

#ganzes Array ausgeben ohne Umbrüche
#echo ${Songs[*]}

#Anzahl Elemente ermitteln
Anzahl=${#Songs[*]}
#echo ${Anzahl}

#Liste ausgeben
#for ((i=0;$i<${Anzahl};i++)); do
#  echo ${Songs[$i]};
#done

#Dateigroessen ermitteln
for ((i=0;$i<${Anzahl};i++)); do
   Dire=($(ls -lg "${Songs[$i]}"))
   #echo ${Dire[3]}
   G=${Dire[3]}
   Groes[$i]=$(((1+G/32768)*32768));
done
#Groessenliste ausgeben
#for ((i=0;$i<${Anzahl};i++)); do
#  echo ${Groes[$i]}; 
#done

i=0
summe=0
#echo ${GG}
until ((${summe}>${GG})); do
   #kopieren
   #echo "${Songs[$i]}"
   #echo "../${Verz}"
   cp "${Songs[$i]}" "../${Verz}"
   #verbrauchten Speicher summieren
   summe=$((summe+${Groes[$i]}))
   #echo "${Groes[$i]}" - "${summe}" - "${Songs[$i]}"
   i=$((i+1));
done

i=$((i-1))
#Letzter Song passt leider nicht  / löschen
rm "../${Verz}/${Songs[$i]##*/}"

#wieder auf's alte Verzeichnis
cd ${aktP}

#endlich

echo Fertig.