Transcoding

Her er et Ruby-script for å dekode FLAC-filer til WAV, for så å kode WAV-filen til MP3, og deretter slette WAV-filen. Under følger et tilsvarende Bash-script for å transcode AAC-filer til MP3.

recode.rb

Scriptet er rimelig simpelt, og ganske så ineffektivt, men det gjør jobben. Dersom man ønsker å gjøre det på en kjappere måte kan man antakeligvis pipe outputen fra flac-dekoderen til mp3-enkoderen.


#!/usr/bin/env ruby

Dir.foreach(`pwd`.chomp) { |fn|
    if fn != "." and fn != ".." and fn != __FILE__
        # Remove suffix
        basename = fn[0..fn.rindex(".")-1]

        # Convert
        `flac -d "#{fn}" "#{basename}.wav"`
        `lame -h --preset standard "#{basename}.wav" "#{basename}.mp3"`
        `rm "#{basename}.wav"`
    end
}

aac2mp3

Scriptet er simpelt og benytter seg av faad og lame. Det prøver også å ta vare på metadata fra tags. Dersom du har en bedre versjon av faad enn det jeg hadde liggende, så kan du bytte den nederste blokken (selve transcodingen) slik at den piper output fra faad til lame, og ikke trenger å gå via midlertidige WAV-filer.


#!/bin/bash
# aac2mp3

extract() {
    echo `faad -i "$1" 2>&1 | grep "^$2: " | sed -e "s/^$2: //"`
}

for file in "$@"; do
    # Does the file appear to be an AAC file?
    file "$file" | grep AAC > /dev/null
    if [ $? -ne 0 ]; then
        echo "Skipping: $file ... not AAC?" > /dev/stderr
        continue
    fi
    bname=`basename "$file"`
    wname=${bname%.*}.wav
    mname=${bname%.*}.mp3

    title=`extract  "$file" "title"`
    artist=`extract "$file" "artist"`
    album=`extract  "$file" "album"`
    genre=`extract  "$file" "genre"`
    track=`extract  "$file" "track"`
    notra=`extract  "$file" "totaltracks"`

    # My version of faad works poorly through stdout. :(
    #/bin/echo -n "M4A => MP3 $mname"
    #faad -q -w "$file" |
    #lame --silent -V2 --tt "$title" --ta "$artist" --tl "$album" \
    #                  --tn "$track" --tg "$genre" - "$mname"
    /bin/echo -n "M4A => WAV"
    faad -q -o "$wname" "$file"
    /bin/echo -n " => MP3: $mname"
    lame --quiet -V2 --tt "$title" --ta "$artist" --tl "$album" \
                     --tn "$track" --tg "$genre" "$wname" "$mname"
    rm "$wname"
    echo "."
done