From: data Date: Sun, 20 Feb 2005 18:54:33 +0000 (+0000) Subject: r49@yurie: data | 2005-02-21 01:39:35 +0200 X-Git-Url: https://git.hcoop.net/clinton/abcde.git/commitdiff_plain/24f444d711d785aa4dd6a2ce9b93aafd64cd19e7?hp=c7ea851d59e5424cb5d2e86db3f56dd060916dfc r49@yurie: data | 2005-02-21 01:39:35 +0200 More PIPES work New output mode with command line options New CUE file mode git-svn-id: http://abcde.googlecode.com/svn/trunk@46 a0fa61bc-5347-0410-a1a9-7f54aa4e1825 --- diff --git a/README b/README index b0b674e..2494e29 100644 --- a/README +++ b/README @@ -25,6 +25,13 @@ ID3TAGV=1 MAJOR CHANGES ============= +Changes in 2.4: +* Support for mkcue, to create a CUE sheet of the CD structure. +* New -o :,... way of passing specific options to an + output. Now we can pass specific options without having to modify a config + file. +* Unix PIPEs, as a second way to encode files with a tight disc space. + Changes in 2.2: * Support for MPP/MP+(Musepack) format. It can be downloaded from diff --git a/abcde b/abcde index 30dfc1c..bd13e20 100755 --- a/abcde +++ b/abcde @@ -39,6 +39,7 @@ echo "-L Use local CDDB storage directory" echo "-n No lookup. Don't query CDDB, just create and use template" echo "-N Noninteractive. Never prompt for anything" echo "-m Modify playlist to include CRLF endings, to comply with some players" +echo "-M Create a CUE file" echo "-o " echo " Output file type(s) (ogg,mp3,flac,spx,mpc). Defaults to ogg" echo "-p Pad track numbers with 0's (if less than 10 tracks)" @@ -970,7 +971,12 @@ do_discid () fi cat /dev/null > "$ABCDETEMPDIR/status" fi - + if [ X"$CUEFILE" = "Xy" -a X"$WEHAVEACD" = "Xy" ]; then + if checkstatus cuefile ; then :; else + $MKCUE $MKCUEOPTS > $ABCDETEMPDIR/cue-$(echo $TRACKINFO | cut -f1 -d' ').txt + echo cuefile >> "$ABCDETEMPDIR/status" + fi + fi # If we got the CDPARANOIA status and it is not recorded, save it now if [ -n "$CDPARANOIAAUDIOTRACKS" ]; then if checkstatus cdparanoia-audio-tracks; then :; else @@ -1517,64 +1523,6 @@ do_cddbedit () echo "cddb-edit" >> "$ABCDETEMPDIR/status" } -# do_cdread_one [lasttrack] [firsttrack] -# -# Reads the CD in a single track. Live performances, concerts, mixes,... benefit from this. -do_cdread_one () -{ - # The commands here don't go through run_command because they're never supposed to be silenced - # return codes need to be doublechecked anyway, however - LASTTRACKNUMBER=$1 - FIRSTTRACKNUMBER=$2 - WAVDATA="$ABCDETEMPDIR/track$FIRSTTRACKNUMBER.wav" - echo "Grabbing the CD to a single track..." >&2 - case "$CDROMREADERSYNTAX" in - cdparanoia) nice $READNICE $CDROMREADER -d $CDROM "1-" "$WAVDATA" >&2 ;; - cdda2wav) - if [ "$OSFLAVOUR" = "OSX" ] ; then - # Hei, we have to unmount the device before running anything like cdda2wav in OSX - disktool -u ${CDROM#/dev/} 0 - # Also, in OSX the cdrom device for cdda2wav changes... - CDDA2WAVCDROM="IODVDServices" - elif [ "$OSFLAVOUR" = "FBSD" ] ; then - CDDA2WAVCDROM="$CDROMID" - else - if [ "$CDROMID" = "" ]; then - CDDA2WAVCDROM="$CDROM" - else - CDDA2WAVCDROM="$CDROMID" - fi - fi - nice $READNICE $CDROMREADER -D $CDDA2WAVCDROM -t 1+$LASTTRACKNUM "$WAVDATA" >&2 - ;; - dagrab) nice $READNICE $CDROMREADER -d $CDROM -f $WAVDATA -v $UTRACKNUM >&2 ;; - cddafs) - # Find the track's mounted path - REALTRACKNUM=$(expr $UTRACKNUM + 0) - FILEPATH=$(mount | grep "$CDROM on" | sed 's/^[^ ]* on \(.*\) (.*/\1/') - FILEPATH=$(find "$FILEPATH" | grep "/$REALTRACKNUM "); - # If the file exists, copy it - if [ -e "$FILEPATH" ] ; then - nice $READNICE $CDROMREADER "$FILEPATH" "$WAVDATA" >&2 - else - false - fi ;; - debug) nice $READNICE $CDROMREADER -d $CDROM -w $UTRACKNUM-[:1] "$WAVDATA" >&2 ;; - esac - RETURN=$? - if [ "$RETURN" != "0" -o ! -s "$WAVDATA" ]; then - # Thank goodness errors is only machine-parseable up to the - # first colon, otherwise this woulda sucked - if [ "$RETURN" = "0" -a ! -s "$WAVDATA" ]; then - RETURN=73 # fake a return code as cdparanoia return 0 also on aborted reads - fi - echo "readtrack-$FIRSTTRACKNUMBER: $CDROMREADER returned code $RETURN" >> "$ABCDETEMPDIR/errors" - return $RETURN - else - echo readtrack-$FIRSTTRACKNUMBER >> "$ABCDETEMPDIR/status" - fi -} - # do_cdread [tracknumber] # do_cdread onetrack [firsttrack] [lasttrack] # @@ -1809,6 +1757,7 @@ METAFLAC=metaflac NORMALIZE=normalize-audio CDSPEED=eject VORBISGAIN=vorbisgain +MKCUE=mkcue # Options for programs called from abcde # mp3 @@ -1840,6 +1789,7 @@ DISTMP3OPTS= NORMALIZEOPTS= CDSPEEDOPTS="-x" CDSPEEDVALUE= +MKCUEOPTS= # Default to one process if -j isn't specified MAXPROCS=1 @@ -1869,6 +1819,7 @@ fi # If USEID3 is set to n, no ID3 tagging is done CDDBAVAIL=y USEID3=y +USEID3V2=y if [ -z "$OUTPUTDIR" ]; then OUTPUTDIR=$(pwd) @@ -1918,7 +1869,7 @@ fi # Parse command line options #while getopts 1a:bc:C:d:Dhj:klLnNo:pr:S:t:T:vVx opt ; do -while getopts 1a:A:bc:C:d:Dhj:klLnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do +while getopts 1a:A:bc:C:d:Dhj:klLmMnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do case "$opt" in 1) ONETRACK=y ;; a) ACTIONS="$OPTARG" ;; @@ -1938,6 +1889,7 @@ while getopts 1a:A:bc:C:d:Dhj:klLnNo:pPr:Rs:S:t:T:vVxw:W: opt ; do n) CDDBAVAIL=n ;; N) INTERACTIVE=n ;; m) DOSPLAYLIST=y ;; + M) CUEFILE=y ;; o) OUTPUTTYPE="$OPTARG" ;; p) PADTRACKS=y ;; P) USEPIPES=y ;; @@ -2016,16 +1968,16 @@ DOCLEAN=n for ACTION in $(echo $ACTIONS | tr , \ ) do case $ACTION in - cddb) DOCDDB=y;; - read) DOREAD=y;; - normalize) DONORMALIZE=y; DOREAD=y;; -# preprocess) DOPREPROCESS=y; DOREAD=y;; - encode) DOENCODE=y; DOREAD=y;; -# postprocess) DOPREPROCESS=y; DOENCODE=y; DOREAD=y;; - tag) DOTAG=y; DOREAD=y; DOENCODE=y; DOCDDB=y;; - move) DOMOVE=y; DOTAG=y; DOREAD=y; DOENCODE=y; DOCDDB=y;; - playlist) DOCDDB=y; DOPLAYLIST=y;; - clean) DOCLEAN=y;; + cddb) DOCDDB=y;; + read) DOREAD=y;; + normalize) DONORMALIZE=y; DOREAD=y;; +# preprocess) DOPREPROCESS=y; DOREAD=y;; + encode) DOENCODE=y; DOREAD=y;; +# postprocess) DOPREPROCESS=y; DOENCODE=y; DOREAD=y;; + tag) DOTAG=y; DOREAD=y; DOENCODE=y; DOCDDB=y;; + move) DOMOVE=y; DOTAG=y; DOREAD=y; DOENCODE=y; DOCDDB=y;; + playlist) DOCDDB=y; DOPLAYLIST=y;; + clean) DOCLEAN=y;; esac done @@ -2104,86 +2056,109 @@ case "$NORMALIZERSYNTAX" in ;; esac +# Allow -o OUTPUT(1):OPTIONS(1),...,OUTPUT(N):OPTIONS(N) mode of operation +if echo $OUTPUTTYPE | grep ":" > /dev/null 2>&1 ; then + OLDFS="$FS" + export FS="," + for OUTPUT in "$OUTPUTTYPE" + do + case "$OUTPUT" in + ogg:*) OGGENCODEROPTSCLI="$( 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- )" ;; + mpc:*) MPPENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; + esac + done + for OUTPUT in "$OUTPUTTYPE" + do + TEMPOUTPUT=$( echo "$OUTPUT" | cut -d: -f1 ) + TEMPOUTPUTTYPE="${TEMPOUTPUTTYPE:+$TEMPOUTPUTTYPE,}$TEMPOUTPUT" + done + OUTPUTTYPE="$TEMPOUTPUTTYPE" + FS="$OLDFS" +fi + # If nothing has been specified, use oggenc for oggs and lame for mp3s and flac for flacs and speexenc for speex and mppenc for mpps # Getting ready for multiple output changes for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) do case $OUTPUT in - ogg) [ "$OGGENCODERSYNTAX" = "default" ] && OGGENCODERSYNTAX=oggenc - [ "$DOTAG" = "y" ] && NEEDCOMMENTER=y - [ "$REPLAYGAIN" = "y" ] && NEEDVORBISGAIN=y - ;; - mp3) [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame - [ "$DOTAG" = "y" ] && NEEDTAGGER=y + ogg) [ "$OGGENCODERSYNTAX" = "default" ] && OGGENCODERSYNTAX=oggenc + [ "$DOTAG" = "y" ] && NEEDCOMMENTER=y + [ "$REPLAYGAIN" = "y" ] && NEEDVORBISGAIN=y + ;; + mp3) [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame + [ "$DOTAG" = "y" ] && NEEDTAGGER=y + ;; + flac) [ "$FLACENCODERSYNTAX" = "default" ] && FLACENCODERSYNTAX=flac + [ "$DOTAG" = "y" ] && NEEDMETAFLAC=y + ;; + spx) [ "$SPEEXENCODERSYNTAX" = "default" ] && SPEEXENCODERSYNTAX=speexenc ;; + mpc) [ "$MPPENCODERSYNTAX" = "default" ] && MPPENCODERSYNTAX=mppenc ;; + *) echo "abcde error: Invalid OUTPUTTYPE defined" >&2 + exit 1 ;; - flac) [ "$FLACENCODERSYNTAX" = "default" ] && FLACENCODERSYNTAX=flac - [ "$DOTAG" = "y" ] && NEEDMETAFLAC=y - ;; - spx) [ "$SPEEXENCODERSYNTAX" = "default" ] && SPEEXENCODERSYNTAX=speexenc ;; - mpc) [ "$MPPENCODERSYNTAX" = "default" ] && MPPENCODERSYNTAX=mppenc ;; - *) echo "abcde error: Invalid OUTPUTTYPE defined" >&2 - exit 1 - ;; esac done # decide which encoder case "$MP3ENCODERSYNTAX" in lame) - MP3ENCODEROPTS="$LAMEOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$LAMEOPTS}" MP3ENCODER="$LAME" ;; gogo) - MP3ENCODEROPTS="$GOGOOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$GOGOOPTS}" MP3ENCODER="$GOGO" ;; bladeenc) - MP3ENCODEROPTS="$BLADEENCOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$BLADEENCOPTS}" MP3ENCODER="$BLADEENC" ;; l3enc) - MP3ENCODEROPTS="$L3ENCOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$L3ENCOPTS}" MP3ENCODER="$L3ENC" ;; xingmp3enc) - MP3ENCODEROPTS="$XINGMP3ENCOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$XINGMP3ENCOPTS}" MP3ENCODER="$XINGMP3ENC" ;; mp3enc) - MP3ENCODEROPTS="$MP3ENCOPTS" + MP3ENCODEROPTS="${MP3ENCODEROPTSCLI:-$MP3ENCOPTS}" MP3ENCODER="$MP3ENC" ;; esac case "$OGGENCODERSYNTAX" in vorbize) - OGGENCODEROPTS="$VORBIZEOPTS" + OGGENCODEROPTS="${OGGENCODEROPTSCLI:-$VORBIZEOPTS}" OGGENCODER="$VORBIZE" ;; oggenc) - OGGENCODEROPTS="$OGGENCOPTS" + OGGENCODEROPTS="${OGGENCODEROPTSCLI:-$OGGENCOPTS}" OGGENCODER="$OGGENC" ;; esac case "$FLACENCODERSYNTAX" in flac) - FLACENCODEROPTS="$FLACOPTS" + FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}" FLACENCODER="$FLAC" ;; esac case "$SPEEXENCODERSYNTAX" in speexenc) - SPEEXENCODEROPTS="$SPEEXENCOPTS" + SPEEXENCODEROPTS="${SPEEXENCODEROPTSCLI:-$SPEEXENCOPTS}" SPEEXENCODER="$SPEEXENC" ;; esac case "$MPPENCODERSYNTAX" in mppenc) - MPPENCODEROPTS="$MPPENCOPTS" + MPPENCODEROPTS="${MPPENCODEROPTSCLI:-$MPPENCOPTS}" MPPENCODER="$MPPENC" ;; esac - + # and which tagger if [ "$ID3TAGV" = "1" ]; then @@ -2211,6 +2186,7 @@ if [ "$REMOTEHOSTS" ]; then NEEDDISTMP3=y; fi [ "$DONORMALIZE" = "y" ] && NEEDNORMALIZER=y [ "$EJECTCD" = "y" ] && NEEDEJECT=y [ ! "$CDDBAVAIL" = "n" ] && [ "$DOCDDB" = "y" ] && NEEDHTTPGET=y +[ "$CUEFILE" = "y" ] && NEEDMKCUE=y if [ X"$CDSPEEDVALUE" != "X" ]; then case "$CDROMREADERSYNTAX" in @@ -2240,7 +2216,7 @@ if [ "$USEPIPES" = "y" ]; then flac) PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYTNAX" ;; spx) - PIPEENCODERSVARCHECK="PIPE_$SPEEXENCODER" ;; + IPEENCODERSVARCHECK="PIPE_$SPEEXENCODER" ;; mpc) PIPEENCODERSVARCHECK="PIPE_$MPPENCODER" ;; esac @@ -2351,7 +2327,6 @@ if [ "$ONETRACK" = "y" ]; then TRACKS="$FIRSTTRACK" for UTRACKNUM in $TRACKQUEUE; do :;done if checkstatus readtrack-$FIRSTTRACK; then :; else - #do_cdread_one $UTRACKNUM $FIRSTTRACK do_cdread onetrack $FIRSTTRACK $UTRACKNUM fi else diff --git a/abcde.1 b/abcde.1 index 223d5b7..6f5946a 100644 --- a/abcde.1 +++ b/abcde.1 @@ -94,10 +94,12 @@ Non interactive mode. Do not ask anything from the user. Just go ahead. Create DOS-style playlists, modifying the resulting one by adding CRLF line endings. Some hardware players insist on having those to work. .TP -.B \-o [filetype] +.B \-o [filetype][:filetypeoptions] Select output type. Can be "ogg", "mp3", "flac", "spx" or "mpc". Specify a comma-delimited list of output types to obtain all specified types. See -the OUTPUTTYPE configuration variable. +the OUTPUTTYPE configuration variable. One can pass options to the encoder for +a specific filetype on the command line separating them with a colon. The +options must be escaped with double-quotes. .TP .B \-p Pads track numbers with 0\'s. @@ -380,6 +382,25 @@ after all tracks have been read. If set to "y", some operations which are usually now shown to the end user are visible, such as CDDB queries. Usefull for initial debug and if your network/CDDB server is slow. +.SH EXAMPLES +Possible ways one can call abcdeƑ +.TP +.B abcde +Will work in most systems +.TP +.B abcde -d /dev/cdrom2 +If the CDROM you are reding from is not the standard /dev/cdrom (in GNU/Linux systems) +.TP +.B abcde -o ogg,flac +Will create both Ogg/Vorbis and Ogg/FLAC files. +.TP +.B abcde -o ogg:"-b 192" +Will pass "-b 192" to the Ogg/Vorbis encoder, without having to modify the +config file +.TP +.B abcde -W 1 +For double CDs settings: will create the 1st CD starting with the track number +101, and will add a comment "CD 1" to the tracks .SH BACKEND TOOLS abcde requires the following backend tools to work: .TP