Few days ago i needed to split and encode one flac file to mp3. I found few solutions, one of them only split flac file, other encode flac to mp3, but no one do not do it in one run.
So, i wrote script, you must specify flac and cue/toc files, after that script will convert flac file to group of mp3 or ogg files and will add tags.
To get this script work, you need to install next packages “cuetools”, “shntool”, “id3v2”, “vorbis-tools” and “lame”.
You will not found lame in standard repositories of squeeze, but you can install it from backports or from debian multimedia repository (all packages available in modern debian based distribution, at least I tested it in debian 8-10).
Usage: flac2mp3 -f /path/to/flac.flac -s /path/to/cue.cue
Also, you can choose between mp3 or ogg with swich -e mp3 or -e ogg (mp3 will be used by default).
Latest version of script available there: https://gist.github.com/IvanBayan/b8a1e7a1629de20b06ef6dc44843c9fe
#!/bin/bash LAMEOPTS="-b 320 --quiet" OGGOPTS="-b 320 --quiet" while getopts ":s:f:e:" opt; do case $opt in f) FILE="$OPTARG" ;; s) SPLIT="$OPTARG" ;; e) FMT="$OPTARG" ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done # Set default format to mp3 case ${FMT:="mp3"} in mp3|MP3|ogg|OGG) ;; *) echo "Unknown format $FMT" >&2 exit 1 ;; esac # Check both files if [ ! -f "$FILE" -o ! -f "$SPLIT" ] then echo "You must specify correct flac file and CUE/TOC file." >&2 exit 1 fi #Get number of tracks NUMTRACKS=`cueprint -d '%N' "${SPLIT}"` for i in `seq 1 $NUMTRACKS` do # Clear previous obtained variables unset PERFORMER unset ALBUM unset TITLE # Set performer, album, track title PERFORMER=`cueprint -n $i -t '%p' "${SPLIT}"` ALBUM=`cueprint -d '%T' "${SPLIT}"` TITLE=`cueprint -n $i -t '%t' "${SPLIT}"` ## Check perfomer, album and track title if [ -z "$PERFORMER" ] then echo "Track $i: Can not obtain performer from cue, set it to 'Unknown Artist'" >&2 PERFORMER="Unknown Artist" fi if [ -z "$ALBUM" ] then echo "Track $i: Can not obtain album from cue, set it to 'Unknown Album'" >&2 ALBUM="Unknown Album" fi if [ -z "$TITLE" ] then echo "Track $i: Can not obtain track from cue, set it to 'Track $i'" >&2 TITLE="Track $i" fi ## End # Split and encoding files echo "Encoding track $i/$NUMTRACKS." if [ "$FMT" = "mp3" -o "$FMT" = "MP3" ] then cuebreakpoints "$SPLIT"| shnsplit -q -o "cust ext=mp3 lame $LAMEOPTS - %f" \ -x $i -O always -a "" -z " - $TITLE" "$FILE" OUTPUT=`printf "%.2d - ${TITLE}.mp3" $i` id3v2 -T $i -a "$PERFORMER" -A "$ALBUM" -t "$TITLE" "$OUTPUT" fi if [ "$FMT" = "ogg" -o "$FMT" = "OGG" ] then cuebreakpoints "$SPLIT"|shnsplit -q -o "cust ext=ogg oggenc $OGGOPTS -o %f -" \ -x $i -O always -a "" -z " - $TITLE" "$FILE" OUTPUT=`printf "%.2d - ${TITLE}.ogg" $i` echo -e "TRACKNUMBER=${i}\nARTIST=${PERFORMER}\nPERFORMER=${PERFORMER}" \ "\nALBUM=${ALBUM}\nTITLE=${TITLE}\n"|vorbiscomment "$OUTPUT" fi done |