#!/bin/bash #set -x # # @(#)vbr2linear 1.4.1 17/03/2015 Copyright 2007,2015 Robert M. Stockmann # stock@stokkie.net # if [ "$1" == "" ]; then PROG=`basename $0` echo "" echo " vbr2linear repairs damaged mp3 audio files and converts them to a " echo " linear format, which then allows one to slide forth and back. Only " echo " skip frames when the audio file is broken. " echo " The original ID3 v1, v1.1 or v2 tags are preserved with the conversion. " echo "" echo " Usage : $PROG \"fancy.file_ - _name.mp3\"
stereo" echo " = number of frames to skip" echo "
= desired bitrate in kbits" echo " stereo : add this to enforce stereo" echo " mono : add this to enforce mono" echo "" echo " If you specify
you must also specify . If the audio file " echo " is not broken, simply specify 0 frames to skip, e.g." echo "" echo " $PROG \"fancy.file_ - _name.mp3\" 0 32" echo "" echo " To enforce stereo or mono all options must be used and you might " echo " want to double
e.g." echo "" echo " $PROG \"fancy.file_ - _name.mp3\" 0 64 stereo" echo "" echo " vbr2linear v1.4.1 has been tested with : " echo "" echo " mpg123 version: 0.68, 1.3.1, 1.12.1 and 1.16.0 " echo " sox: Version 12.17.4 and sox: SoX v14.4.1 " echo " LAME version 3.92, LAME 64bits version 3.98.4." echo " and LAME 64bits version 3.99.5 (http://lame.sf.net) " echo "" else MPG_VERSION=`mpg123 --version | awk '{print $2}'` SOX_VERSION=`sox --version | awk '{print $3}'` VBR_TEMP=/tmp/vbr2linear.$$ if [ "$MPG_VERSION" == "1.12.1" ]; then mpg123 -n 10 -o dummy "$1" > $VBR_TEMP 2>&1 fi if [ "$MPG_VERSION" == "1.3.1" ]; then mpg123 -n 10 -o dummy "$1" > $VBR_TEMP 2>&1 fi if [ "$MPG_VERSION" == "1.16.0" ]; then mpg123 -n 10 -o dummy "$1" > $VBR_TEMP 2>&1 fi if [ "$MPG_VERSION" == "0.68" ]; then mpg123 -n 10 -a /dev/null "$1" > $VBR_TEMP 2>&1 fi if [ "$SOX_VERSION" == "v14.3.0" ]; then BITS_OPT=" -b 16 " elif [ "$SOX_VERSION" == "v14.4.1" ]; then BITS_OPT=" -b 16 " else BITS_OPT=" -w " fi TITLE=`cat "$VBR_TEMP" | grep Title: |\ sed 's/Artist:.*$//' |\ sed 's/^.*Title:/Title:/' |\ sed 's/Title: //' |\ sed 's/Title: //' | sed 's/ *$//'` ARTIST=`cat "$VBR_TEMP" | grep Artist: |\ sed 's/Comment:.*$//' |\ sed 's/^.*Artist:/Artist:/' |\ sed 's/Artist: //' |\ sed 's/Artist: //' | sed 's/ *$//'` COMMENT=`cat "$VBR_TEMP" | grep Comment: |\ sed 's/Album:.*$//' |\ sed 's/^.*Comment:/Comment:/' |\ sed 's/Comment: //' |\ sed 's/Comment://' | sed 's/ *$//'` ALBUM=`cat "$VBR_TEMP" | grep Album: |\ sed 's/Year:.*$//' | sed 's/^.*Album:/Album:/' |\ sed 's/Album: //' |\ sed 's/Album: //' | sed 's/ *$//'` YEAR=`cat "$VBR_TEMP" | grep Year: |\ sed 's/Genre:.*$//' |\ sed 's/^.*Year:/Year:/' |\ sed 's/Year: //' |\ sed 's/Year: //' | sed 's/ *$//'` GENRE=`cat "$VBR_TEMP" | grep Genre: |\ sed 's/^.*Genre:/Genre:/' |\ sed 's/Genre: //' |\ sed 's/Genre: //' | sed 's/ *$//'` LGENRE=`lame --genre-list | grep "$GENRE"` if [ "$LGENRE" == "" ]; then GENRE=Speech fi SFREQ=`cat "$VBR_TEMP" | grep ^MPEG |\ awk -F"," '{print $3}' | awk '{print $1}'` BRATE=`cat "$VBR_TEMP" | grep ^MPEG |\ awk -F"," '{print $2}' | awk '{print $1}'` STYPE=`cat "$VBR_TEMP" | grep ^MPEG |\ awk -F"," '{print $3}' | awk '{print $3}'` if [ "$STYPE" == "stereo" ]; then NCHAN=2 elif [ "$STYPE" == "joint-stereo" ]; then NCHAN=2 elif [ "$STYPE" == "mono" ]; then NCHAN=1 fi if [ "$4" == "stereo" ] && [ "$NCHAN" == "1" ]; then MPG123_STEREO=" --stereo " NCHAN=2 elif [ "$4" == "mono" ] && [ "$NCHAN" == "2" ]; then MPG123_STEREO=" --mono " NCHAN=1 else MPG123_STEREO="" fi BASE=`echo "$1" | sed 's/\.mp3//'` echo " Converting $1 to $BASE.wav " if [ "$2" == "" ]; then mpg123 $MPG123_STEREO -q -s "$1" 2>/dev/null |\ sox -t raw -r "$SFREQ" -s $BITS_OPT -c"$NCHAN" - "$BASE".wav else NFRAM="$2" mpg123 $MPG123_STEREO -k "$NFRAM" -q -s "$1" 2>/dev/null |\ sox -t raw -r "$SFREQ" -s $BITS_OPT -c"$NCHAN" - "$BASE".wav fi echo " Done ..." exit 0 if [ "$3" == "" ]; then LBR="$BRATE" else LBR="$3" fi if [ -f $BASE.TAG ]; then . ./$BASE.TAG fi echo " Creating $BASE-linear.mp3" lame --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \ --ty "$YEAR" --tc "$COMMENT" --tg "$GENRE" \ --quiet -h -b "$LBR" "$BASE".wav "$BASE"-linear.mp3 echo " Done ..." rm "$BASE".wav rm "$VBR_TEMP" fi exit 0