Regelmäßig nehme ich über meinen VU+ Receiver Sendungen aus dem Radio auf, die ich dann hören wenn ich Zeit habe. Da ich dann aber die Aufnahmen auf PC oder Handy höre, war es mir irgendwann zu umständlich, die Aufnahmen manuell immer in ein geeignetes Format umzuwandeln bzw. Player zu installieren, die mit dem .ts Dateien zurecht kommen.
Da auf den VU+ Receivern ja ein Linux läuft, lässt sich aber im Handumdrehen etwas selbst basteln. Damit dass was ich mir gebastelt habe, auch funktioniert, muss man zuerst das Paket ffmpeg installieren, dass den passenden Befehl zum Konvertieren der .ts Datei mitbringt. Das passt mit folgendem Befehl, wenn man sich auf der Box via SSH/Telnet angemeldet hat:
opkg install ffmpeg
Anschließend kann man folgenden Quellcode z.B. direkt in /home/root als Skript abspeichern. Ich habe das Skript bei mir convert.sh genannt. Vergessen sollte man am Ende nicht, das Skript auch noch mit chmod 660 ausführbar zu machen.
#!/bin/sh
# Where to write the logfile
LOGFILE="/var/log/convert.log"
# Where are the file found for convert
RECORD_DIR="/media/hdd/movie/Sunshine Live/"
# 0 = full console ouput, 1 = only necessary output
SILENT=0
# Some init stuff
shopt -s nullglob
OLDIFS=$IFS
IFS=$'\n'
# trap ctrl-c and call ctrl_c()
trap breakScript INT
# Handling script termination by user
function breakScript() {
echo "Script execution stopped!" | tee -a $LOGFILE
if [ -f /var/run/convert.pid ] ; then
rm /var/run/convert.pid
exit 1
fi
}
# Handling alread running script
if [ -f /var/run/convert.pid ]; then
if ps -p $(cat /var/run/convert.pid) > /dev/null
then
echo "Script is already running!" | tee -a $LOGFILE
exit 2
else
echo "Script was stopped unexpected before, continue this run" | tee -a $LOGFILE
fi
fi
# Save process if for check, script is already running
echo $$ > /var/run/convert.pid
# Parse all files in given directory
for FILE in $(find $RECORD_DIR -type f -name "*.ts" -mmin +60 -exec ls {} \;); do
if [ -f $FILE.mp3 ]; then
if [ "$SILENT" -eq 0 ] ; then
echo "Skip convert for '$FILE'" | tee -a $LOGFILE
fi
else
echo "Convert '$FILE' to '$FILE.mp3'" | tee -a $LOGFILE
AUTHOR="$(echo $FILE|cut -d "-" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')";
SHOW="$(echo $FILE|cut -d "-" -f3 | sed 's/^[ \t]*//;s/[ \t]*$//' | sed "s/\.ts$//g")";
nice -n19 ffmpeg -hide_banner -loglevel panic -i "$FILE" -vn -ar 44100 -ac 2 -b:a 192k -metadata title="$AUTHOR - $SHOW" -metadata artist="$ARTIST" -metadata show="$SHOW" "$FILE.mp3" | tee -a $LOGFILE
##nice -n19 ffmpeg -metadata title="$FILE" -metadata artist="$ARTIST" -metadata show="$SHOW" -hide_banner -loglevel panic -i "$FILE" -vn -ar 44100 -ac 2 -b:a 192k "$FILE.mp3" | tee -a $LOGFILE
RESULT=$?
echo "exit code: $RESULT" | tee -a $LOGFILE
if [ "$RESULT" -eq 0 ]; then
touch $FILE.remove
fi
fi
if [ -f $FILE.remove ]; then
for CONVFILE in $(ls -1 $FILE*)
do
if [ $CONVFILE != "$FILE.mp3" ] ; then
rm $CONVFILE
fi
done
fi
done
# Cleanup
rm /var/run/convert.pid
IFS=$OLDIFS
Groß im Detail mag ich jetzt gar nicht erklären, wie genau das Skript funktioniert. Wichtig ist, dass man mal drüber schaut und es an die eigenen Bedürfnisse anpasst.
Ich habe das Skript bei mir dann noch via crontab -e eingetragen, so dass das alle 30 Minuten automatisch läuft:
*/30 * * * * /home/root/convert.sh
Letztendlich wird das Skript alle 30 Minuten ausgeführt. Sucht dann im angegebenen Pfad nach .ts Dateien, wandelt die um und gibt denen auch noch halbwegs aussagekräftige Tags mit.