X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/0c77cbf2d0bd91907c43230a02f725f252e92004..27e5be1d838b3e0586bb076708eebdd28bb8f971:/abcde diff --git a/abcde b/abcde index 5993b05..051ad66 100755 --- a/abcde +++ b/abcde @@ -51,7 +51,7 @@ echo "-m Modify playlist to include CRLF endings, to comply with some player echo "-n No lookup. Don't query CDDB, just create and use template" echo "-N Noninteractive. Never prompt for anything" echo "-o " -echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a). Defaults to vorbis" +echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus). Defaults to vorbis" echo "-p Pad track numbers with 0's (if less than 10 tracks)" echo "-P Use UNIX pipes to read+encode without wav files" echo "-q " @@ -433,8 +433,8 @@ getcddbinfo() gettracknum() { if [ -n "$STARTTRACKNUMBER" ] ; then - # Get the trackpadding from the current track - CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c) + # Get the trackpadding from the current track, also trim whitespace for MacOSX + CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c | tr -d ' ') TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK )) else TRACKNUM=${UTRACKNUM} @@ -515,6 +515,9 @@ do_replaygain() vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -824,13 +827,18 @@ do_tag () eyed3) # FIXME # track numbers in mp3 come with 1/10, so we cannot # happily substitute them with $TRACKNUM + # FIXME as well! # Older versions of eyeD3 (< 0.7.0) expect + # --set-encoding and --set-text-frame so perhaps some version + # sniffing would be useful. Might also be better to simply cut + # ties with the older eyeD3... Andrew. + # eyeD3 --comment syntax is also different in < and >= 0.7.0 run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS \ - --comment=::"$COMMENTOUTPUT" -A "$DALBUM" \ + --comment="$COMMENTOUTPUT" -A "$DALBUM" \ -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \ -G "$GENREID" -n "${TRACKNUM:-$1}" \ ${TRACKNUM:+-N "$TRACKS"} \ - ${ENCODING:+--set-encoding="$ENCODING"} \ - ${TPE2:+--set-text-frame=TPE2:"$TPE2"} \ + ${ENCODING:+--encoding="$ENCODING"} \ + ${TPE2:+--text-frame=TPE2:"$TPE2"} \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; # FIXME # Still not activated... @@ -898,6 +906,10 @@ do_tag () ;; esac ;; + opus) + run_command tagtrack-$OUTPUT-$1 true + ;; + flac) ( echo ARTIST="$TRACKARTIST" @@ -1018,6 +1030,9 @@ do_encode () vorbis|ogg) TEMPARG="PIPE_$OGGENCODERSYNTAX" ;; + opus) + TEMPARG="PIPE_$OPUSENCODERSYNTAX" + ;; flac) TEMPARG="PIPE_$FLACENCODERSYNTAX" ;; @@ -1060,6 +1075,9 @@ do_encode () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1115,6 +1133,32 @@ do_encode () ;; esac ;; + opus) + case "$2" in + %local*%) + case "$OPUSENCODERSYNTAX" in + opusenc) + + if [ "$(eval echo ${COMMENT})" != "" ]; then + case "$COMMENT" in + *=*) ;; + *) COMMENT="COMMENT=$COMMENT" ;; + esac + fi + # Tag the file at encode time, as it can't be done after encoding. + if [ "$DOTAG" = "y" ]; then + $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" --comment album="$DALBUM" --title "$TRACKNAME" --comment track="$1" --comment genre="$CDGENRE" --comment year="$CDYEAR" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT" + else + $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS "$IN" "$OUT" + fi + ;; + esac + ;; + *) + $RUN_COMMAND nice $DISTMP3NICE $DISTMP3 $DISTMP3OPTS "$2" "$IN" "$OUT" >/dev/null 2>&1 + ;; + esac + ;; flac) case "$2" in %local*%) @@ -1397,6 +1441,9 @@ do_move () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1478,6 +1525,9 @@ do_playlist () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1705,7 +1755,7 @@ abcde.mkcue () { shift 2 echo REM DISCID $DISCID - echo FILE \""$CUEWAVEFILE"\" WAVE + echo FILE \""$CUEWAVFILE"\" WAVE if [ $1 -ne 150 ] && [ $MODE = "PREGAP" ] ; then OFFSET=$1 @@ -2903,6 +2953,7 @@ do_cdread () # Add a variable to check if tracks are provided in command line and if not, use "0-" to rip the tracks READTRACKNUMS="$FIRSTTRACK-$LASTTRACK" ;; cdda2wav | icedax) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;; + pird) READTRACKNUMS="$FIRSTTRACK..$LASTTRACK" ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -2983,6 +3034,12 @@ do_cdread () else nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" fi ;; + pird) + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$FILEARG" + else + nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$PIPERIPPER_pird" > "$FILEARG" + fi ;; cddafs) # Find the track's mounted path REALTRACKNUM=$(expr $UTRACKNUM + 0) @@ -3149,6 +3206,7 @@ ENCODERSYNTAX=default MP3ENCODERSYNTAX=default OGGENCODERSYNTAX=default +OPUSENCODERSYNTAX=default FLACENCODERSYNTAX=default SPEEXENCODERSYNTAX=default MPCENCODERSYNTAX=default @@ -3199,6 +3257,8 @@ MP3ENC=mp3enc # ogg VORBIZE=vorbize OGGENC=oggenc +#opus +OPUSENC=opusenc # flac FLAC=flac # speex @@ -3219,6 +3279,7 @@ CDPARANOIA=cdparanoia CDDA2WAV=icedax DAGRAB=dagrab CDDAFS=cp +PIRD=pird CDDISCID=cd-discid CDDBTOOL=cddb-tool MUSICBRAINZ=abcde-musicbrainz-tool @@ -3249,6 +3310,8 @@ MP3GAINOPTS="-a -k" VORBIZEOPTS= OGGENCOPTS= VORBISGAINOPTS="--album" +#opus +OPUSENCOPTS= # flac FLACOPTS= FLACGAINOPTS="--add-replay-gain" @@ -3260,7 +3323,10 @@ MPCENCOPTS= AACENCOPTS= ID3OPTS= -EYED3OPTS="--set-encoding=utf16-LE" +# FIXME # Older versions of eyeD3 (< 0.7.0) expect --set-encoding=utf16-LE +# so perhaps some version sniffing would be useful. Or perhaps it might be +# better to simply cut ties with the older eyeD3... Andrew. +EYED3OPTS="--encoding utf16" CDPARANOIAOPTS= CDDA2WAVOPTS= DAGRABOPTS= @@ -3285,10 +3351,10 @@ ACTIONS=cddb,read,encode,tag,move,clean # This option is basically for Debian package dependencies: # List of preferred outputs - by default, run with whatever we have in the path -DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac +DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac:opus # List of preferred cdromreaders - by default, run whichever we have in the path -DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav" +DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav pird" # List of quality levels associated with the encoders: DEFAULT_QUALITY_XLO="oggenc:-q -1,lame:-q 9,speex:--quality 1,m4a:" @@ -3311,6 +3377,8 @@ elif [ X$(uname) = "XDarwin" ] ; then # We should have diskutil in OSX, but let's be sure... NEEDDISKUTIL=y CDROMREADERSYNTAX=cddafs + # We won't find the eject program in OSX, and doing checkexec will fail further below... + unset EJECT elif [ X$(uname) = "XOpenBSD" ] ; then HTTPGET=wget MD5SUM=md5 @@ -3513,6 +3581,7 @@ if [ "$ONETRACK" = "y" ]; then flac) ;; cdparanoia) ;; cdda2wav | icedax) ;; + pird) ;; *) log error "$CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -3707,6 +3776,10 @@ case "$CDROMREADERSYNTAX" in CDROMREADER="$DAGRAB" CDROMREADEROPTS="$DAGRABOPTS" ;; + pird) + CDROMREADER="$PIRD" + CDROMREADEROPTS="$PIRDOPTS" + ;; cddafs) CDROMREADER="$CDDAFS" CDROMREADEROPTS="$CDDAFSOPTS" @@ -3730,6 +3803,7 @@ if echo "$OUTPUTTYPE" | grep ":" > /dev/null 2>&1 ; then for OUTPUT in "$(echo "$OUTPUTTYPE" | tr \ \|| tr , \ | tr \| \ )"; do case "$OUTPUT" in vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; + opus:*) OPUSENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; mp3:*) MP3ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; flac:*) FLACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; @@ -3757,6 +3831,10 @@ do [ "$DOREPLAYGAIN" = "y" ] && NEEDVORBISGAIN=y OGGOUTPUTCONTAINER=ogg ;; + opus) + [ "$OPUSENCODERSYNTAX" = "default" ] && OPUSENCODERSYNTAX=opusenc + OPUSOUTPUTCONTAINER=opus + ;; mp3) [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame [ "$DOTAG" = "y" ] && NEEDTAGGER=y @@ -3833,6 +3911,12 @@ case "$OGGENCODERSYNTAX" in OGGENCODER="$OGGENC" ;; esac +case "$OPUSENCODERSYNTAX" in + opusenc) + OPUSENCODEROPTS="${OPUSENCODEROPTSCLI:-$OPUSENCOPTS}" + OPUSENCODER="$OPUSENC" + ;; +esac case "$FLACENCODERSYNTAX" in flac) FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}" @@ -3946,6 +4030,7 @@ fi if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;; + pird) CDROMREADEROPTS="$PIRDOPTS -s $CDSPEEDVALUE" ;; ### FIXME ### translate "cue2discid" from python to bash flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ; CDSPEEDVALUE="" ;; *) NEEDCDSPEED=y ;; @@ -3959,12 +4044,14 @@ fi PIPERIPPER_cdparanoia="-" PIPERIPPER_debug="-" PIPERIPPER_flac="-c " +PIPERIPPER_pird="-" # Encoders with USEPIPE support # FIXME # Include here all the encoders we can figure out support pipes PIPE_lame="-" PIPE_bladeenc="-" PIPE_oggenc="-" +PIPE_opusenc="-" PIPE_flac="-" # Figure out if we can use pipes with the ripper/encoder combination @@ -3976,6 +4063,8 @@ if [ "$USEPIPES" = "y" ]; then PIPEENCODERSVARCHECK="PIPE_$MP3ENCODERSYNTAX" ;; vorbis|ogg) PIPEENCODERSVARCHECK="PIPE_$OGGENCODERSYNTAX" ;; + opus) + PIPEENCODERSVARCHECK="PIPE_$OPUSENCODERSYNTAX" ;; flac) PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;; spx) @@ -4003,7 +4092,7 @@ fi # Make sure a buncha things exist for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ - $OGGENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \ + $OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \ $AACENCODER $CDDBTOOL \ ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \ ${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \ @@ -4108,6 +4197,7 @@ fi if [ X"$CDSPEEDVALUE" != "X" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) ;; + pird) ;; flac) ;; *) do_cdspeed ;; esac @@ -4221,7 +4311,7 @@ post_read # We are now finished with the cdrom - it can be safely ejected. Note that # abcde will not have completed yet. -if [ "$EJECTCD" = "y" ] && [ -x $(which $EJECT) ]; then +if [ "$EJECTCD" = "y" ]; then # We check if the disk we are processing is actually the disk inside the # CD tray. If not, we do not eject the CD, since it might be so that the # user ejected it manually. @@ -4238,7 +4328,7 @@ if [ "$EJECTCD" = "y" ] && [ -x $(which $EJECT) ]; then $eject $EJECTOPTS $cd elif [ X"$(uname)" = X"Darwin" ] ; then diskutil eject ${CDROM#/dev/} 0 - else + elif [ -x $(which $EJECT) ]; then $EJECT $EJECTOPTS "$CDROM" fi #fi