Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  1 512
Lagde et enkelt script for å parse .m3u-playlists laget av MPD og decode til .wav slik at jeg kan brenne de enkelt og i rekkefølge. Scriptet fjerner alle spaces og renamer til lowercase.

Krever flac, ogg-tools og lame.

Script:

Kode

# Decode a list of media files

function decode_flac()
{
        flac --silent --decode "$1" -o "$2" 2>/dev/null
        return $?
}

function decode_mp3()
{
        lame --silent --decode "$1" "$2" 2>/dev/null
        return $?
}

decode_ogg()
{
        oggdec -b 16 --quiet "$1" -o "$2" 2>/dev/null
        return $?
}

function fixname()
{
        echo "$1" | tr ' ' '_' | tr '[A-Z]' '[a-z]'
}

Lines=0

if [ "$VERBOSE" == "yes" ]; then
        echo "Processing $*..."
        echo
fi


cat "$1" | while read file;
        do
        {
                if [ ! -f "$file" ]; then
                        echo "ERROR: $file is not a file"
                        continue
                fi

                (( Lines++ ));
                dest=`pwd`
                clean=`basename "$file"`
                line=`printf %02d $Lines`
                ftype=`echo $clean | awk -F . '{print $NF}'`
                bname=`basename "$file" .$ftype`
                bname=$dest/$line---`fixname "$bname"`.wav

                if [ "$VERBOSE" == "yes" ]; then
                        echo "Decoding $line: $file"
                fi

                if [ "$ftype" == "mp3" ]; then
                        decode_mp3 "$file" "$bname"
                elif [ "$ftype" == "ogg" ]; then
                        decode_ogg "$file" "$bname"
                elif [ "$ftype" == "flac" ]; then
                        decode_flac "$file" "$bname"
                else
                        if [ "$VERBOSE" == "yes" ]; then
                                echo -e "\tNot a valid file!"
                        fi
                fi

                if [ $? -ne 0 ]; then
                        if [ "$VERBOSE" == "yes" ]; then
                                echo -e "\tDecode failed!"
                        fi
                else
                        echo $bname
                fi
        }
done
Output:

Kode

13:13:12 [[ incendio ]] kimt:/tmp $ decode /var/lib/mpd/playlists/test.m3u 
/tmp/01---01._a_perfect_circle_-_the_package.wav
/tmp/02---acdc_-_back_in_black.wav
/tmp/03---01_chernozem.wav

13:13:42 [[ incendio ]] kimt:/tmp $ VERBOSE=yes decode /var/lib/mpd/playlists/test.m3u 
Processing /var/lib/mpd/playlists/test.m3u...

Decoding 01: /stuff/music/A Perfect Circle/Thirteenth Step (2003)/01. A Perfect Circle - The Package.ogg
/tmp/01---01._a_perfect_circle_-_the_package.wav
Decoding 02: /stuff/music/singles/ACDC - Back In Black.mp3
/tmp/02---acdc_-_back_in_black.wav
Decoding 03: /stuff/music/aes_dana--memory_shell/01 Chernozem.flac
/tmp/03---01_chernozem.wav
Det ble noe tull med copy/pasting. Det skal være #!/bin/bash øverst, samt "function decode_ogg" ikke "decode_ogg".
Sist endret av slicer; 1. mars 2009 kl. 13:38. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
pebkac
slicer's Avatar
Trådstarter
Ny versjon. Denne resampler wav-filen til riktig format iht. Red Book. Krever da i tillegg sox.

Kode

bin/bash
# Decode a list of media files

logfile=/dev/null

function resample()
{
        sox "$1" -r 44100 -L -s -c 2 -b 16 "$2" rate -v >$logfile 2>$logfile
        return $?
}

function decode_flac()
{
        flac --silent --decode "$1" -o "$2" >$logfile 2>$logfile
        return $?
}

function decode_mp3()
{
        lame --silent --decode "$1" "$2" >$logfile 2>$logfile
        return $?
}

function decode_ogg()
{
        oggdec -b 16 --quiet "$1" -o "$2" >$logfile 2>$logfile
        return $?
}

function fixname()
{
        echo "$1" | tr ' ' '_' | tr '[A-Z]' '[a-z]'
}

Lines=0

if [ "$1" == "-h" ]; then
        echo "`basename $0` - decode a list of media files"
        echo "Syntax: `basename $0` [-h] [-v] FILE"
        echo -e "  -h\tShow this help text"
        echo -e "  -v\tShow more messages"
        echo -e "  FILE\tThe input playlist"
        exit
fi

if [ "$1" == "-v" ]; then
        VERBOSE="yes"
        logfile=/dev/stdout
        shift
fi

if [ "$VERBOSE" == "yes" ]; then
        echo "Processing $*..."
        echo
fi

cat "$1" | while read file;
        do
        {
                if [ ! -f "$file" ]; then
                        echo "ERROR: $file is not a file"
                        continue
                fi

                (( Lines++ ));
                dest=`pwd`
                clean=`basename "$file"`
                line=`printf %02d $Lines`
                ftype=`echo $clean | awk -F . '{print $NF}'`
                tmp="decoded.wav"
                bname=`basename "$file" .$ftype`
                bname=$dest/$line---`fixname "$bname"`.wav

                if [ "$VERBOSE" == "yes" ]; then
                        echo "Decoding $line: $file"
                fi

                if [ "$ftype" == "mp3" ]; then
                        decode_mp3 "$file" "$tmp"
                elif [ "$ftype" == "ogg" ]; then
                        decode_ogg "$file" "$tmp"
                elif [ "$ftype" == "flac" ]; then
                        decode_flac "$file" "$tmp"
                else
                        if [ "$VERBOSE" == "yes" ]; then
                                echo -e "\tNot a valid file!"
                        fi
                fi

                if [ $? -ne 0 ]; then
                        if [ "$VERBOSE" == "yes" ]; then
                                echo -e "\tDecode failed!"
                        fi
                else
                        resample "$tmp" "$bname"
                        echo "$bname"
                        rm "$tmp"
                fi
        }
done