# do_tag [tracknumber]
# id3 tags a filename
# variables used:
-# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC, ATOMICPARSLEY
+# TRACKS, TRACKNAME, TRACKARTIST, TAGGER, TAGGEROPTS, VORBISCOMMENT, METAFLAC,
# COMMENT, DALBUM, DARTIST, CDYEAR, CDGENRE
do_tag ()
{
mpc)
run_command tagtrack-$OUTPUT-$1 true
;;
+ aac)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
m4a)
- # Use a temp-file of our choice. --overWrite seems to
- # case core dumps with AtomicParsley 0.9.0
- ATOMICTEMPFILE="$ABCDETEMPDIR/track$1.m4a-atomic"
-
- VARIOUSBOOL="false"
- if [ "$VARIOUSARTISTS" = "y" ]; then
- VARIOUSBOOL="true"
- fi
-
- #It has to be command file opts for AtomicParsley
- run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $ATOMICPARSLEY "$ABCDETEMPDIR/track$1.m4a" --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --tracknum ${TRACKNUM:-$1} --year "$CDYEAR" --genre "$CDGENRE" --compilation $VARIOUSBOOL --comment "$COMMENTOUTPUT" --output $ATOMICTEMPFILE
- if [ -f $ATOMICTEMPFILE ]; then
- mv "$ATOMICTEMPFILE" "$ABCDETEMPDIR/track$1.m4a"
- fi
+ case "$AACENCODERSYNTAX" in
+ fdkaac) # We will use inline tagging...
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ neroAacEnc) # Tag post encode with neroAacTag...
+ run_command tagtrack-$OUTPUT-$1 nice $ENCNICE "$NEROAACTAG" "$ABCDETEMPDIR/track$1.m4a" \
+ -meta:artist="$TRACKARTIST" -meta:album="$DALBUM" -meta:title="$TRACKNAME" -meta:track=${TRACKNUM:-$1} \
+ -meta:year="$CDYEAR" -meta:genre="$CDGENRE" -meta:comment="$COMMENT"
+ ;;
+ faac)
+ run_command tagtrack-$OUTPUT-$1 true
+ ;;
+ esac
;;
wav)
run_command tagtrack-$OUTPUT-$1 true
mpc)
TEMPARG="PIPE_$MPCENCODER"
;;
+ aac)
+ TEMPARG="PIPE_$AACENCODERSYNTAX"
+ ;;
m4a)
TEMPARG="PIPE_$AACENCODERSYNTAX"
;;
# Musepack SV7 which used mppenc....
$RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT"
;;
+ aac)
+ # aac container is only used to catch faac encoded files where faac
+ # is compiled without mp4 support (with libmp4v2). Andrew.
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ ;;
m4a)
- # Tag the file at encode time, as it can't be done after encoding.
- if [ "$AACENC" = "neroAacEnc" ] ; then
- DOTAG=y
- $RUN_COMMAND nice $ENCNICE $AACENC $AACENCOPTS -if "$IN" -of "$OUT"
- elif [ ! "$DOTAG" = "y" ]; then
- $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" -o "$OUT" "$IN"
-
- else
- $RUN_COMMAND nice $ENCNICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
- fi
+ case "$AACENCODERSYNTAX" in
+ faac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" \
+ --album "$DALBUM" --title "$TRACKNAME" --track ${TRACKNUM:-$1} --year "$CDYEAR" \
+ --genre "$CDGENRE" --comment "$COMMENT" -o "$OUT" "$IN"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -o "$OUT" "$IN"
+ fi
+ ;;
+ neroAacEnc)
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS -if "$IN" -of "$OUT"
+ ;;
+ fdkaac)
+ if [ "$DOTAG" = "y" ]; then
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" \
+ --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --long-tag Year:"$CDYEAR" --comment "$COMMENT" "$IN" -o "$OUT"
+ else
+ $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS "$IN" -o "$OUT"
+ fi
+ ;;
+ esac
;;
wav)
# In case of wav output we need nothing. Just keep the wavs.
VORBISCOMMENT=vorbiscomment
METAFLAC=metaflac
AACTAG=faac
-ATOMICPARSLEY=AtomicParsley
+NEROAACTAG=neroAacTag
+FDKAAC=fdkaac
CDPARANOIA=cdparanoia
CDDA2WAV=icedax
flac:*) FLACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
mpc:*) MPCENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
- m4a:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+ m4a:*|aac:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
esac
done
for OUTPUT in "$(echo "$OUTPUTTYPE" | tr , \ )"; do
[ "$MPCENCODERSYNTAX" = "default" ] && MPCENCODERSYNTAX=mpcenc
[ "$DOREPLAYGAIN" = "y" ] && NEEDMPPGAIN=y
;;
+ aac)
+ [ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
+ [ "$DOTAG" = "n" ]
+ # Neither Faac nor AtomicParsley can tag the .aac files which are used for faac
+ # compiled without libmp4v2... Andrew.
+ ;;
m4a)
[ "$AACENCODERSYNTAX" = "default" ] && AACENCODERSYNTAX=faac
- [ "$DOTAG" = "y" ] && CHECKATOMICPARSLEY=y
+ [ "$DOTAG" = "y" ] && CHECKFAACBUILD=y
;;
wav)
if [ "$KEEPWAVS" = "y" ]; then
;;
esac
case "$AACENCODERSYNTAX" in
- faac)
+ faac|neroAacEnc|fdkaac)
AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
AACENCODER="$AACENC"
;;
for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
$OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
$AACENCODER $CDDBTOOL \
- ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \
${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
${NEEDNORMALIZER+$NORMALIZER} ${NEEDEJECT+$EJECT} \
checkexec "$X"
done
-if [ "$CHECKATOMICPARSLEY" = "y" ]; then
- if ! new_checkexec "$ATOMICPARSLEY"; then
- echo "WARNING: $ATOMICPARSLEY Not Found Not Post-Tagging!"
- DOTAG='n'
- else
- echo "Using $ATOMICPARSLEY To Tag AAC Tracks."
- fi
+# Under Debian and Ubuntu faac is compiled without libmp4v2 which means no support
+# for the mp4 container and no tagging capability. (AtomicParsley also cannot tag
+# these files). The resulting files are actually ADTS streams which belong in an
+# aac container and with some version sniffing this is all cleaned up below. If
+# faac is compiled with libmp4v2 inline tagging occurs with faac. Andrew.
+
+if [ "$CHECKFAACBUILD" = "y" ] && [ "$AACENCODERSYNTAX" = "faac" ] ; then
+ if faac --help 2>&1 | grep -q -F 'MP4 support unavailable.'; then
+ echo "WARNING: Your copy of Faac does not have mp4 support"
+ echo "WARNING: Encoding untagged files to aac..."
+ OUTPUTTYPE=aac
+ else
+ echo "Using Faac to Tag AAC Tracks..."
+ fi
fi
# And last but not least, check if we can diff between files. We do not abort,
.TH abcde 1
.SH NAME
-abcde \- Grab an entire CD and compress it to Ogg/Vorbis, MP3, FLAC, Ogg/Speex and/or MPP/MP+(Musepack) format.
+abcde \- Grab an entire CD and compress it to Ogg/Vorbis, MP3, FLAC, Ogg/Speex, AAC and/or MPP/MP+(Musepack) format.
.SH SYNOPSIS
.B abcde
.I [options] [tracks]
subdirectory named after the artist under the current directory. This can be
modified using the OUTPUTFORMAT and VAOUTPUTFORMAT variables in your
\fIabcde.conf\fR. Each file is given an extension identifying its compression
-format, 'vorbis' for '.ogg', '.mp3', '.flac', '.spx', '.mpc', '.aac', '.wav' or '.opus'.
+format, 'vorbis' for '.ogg', '.mp3', '.flac', '.spx', '.mpc', '.wav' or '.opus'.
.SH CONFIGURATION
\fBabcde\fR sources two configuration files on startup - \fI/etc/abcde.conf\fR and
\fI$HOME/.abcde.conf\fR, in that order.
.TP
.B AACENCODERSYNTAX
Specifies the style of encoder to use for M4A (AAC) encoder. We support \'faac\'
-as \'default\' but support is there for neroAacEnc as well.
+as \'default\' as well as higher quality audio with neroAacEnc and fdkaac.
.TP
.B OPUSENCODERSYNTAX
Specifies the style of encoder to use for the Opus encoder. At this point only
Specifies the encoding format to output, as well as the default extension and
encoder. Defaults to "vorbis". Valid settings are "vorbis" (or "ogg")
(Ogg/Vorbis), "mp3" (MPEG-1 Audio Layer III), "flac" (Free Lossless Audio
-Codec), "spx" (Ogg/Speex), "mpc" (MPP/MP+ (Musepack)), "m4a" (for M4A (AAC)),
+Codec), "spx" (Ogg/Speex), "mpc" (MPP/MP+ (Musepack)), "m4a" (AAC)),
"wav" (Microsoft Waveform) or "opus" (Opus Interactive Audio Codec). Values
like "vorbis,mp3" encode the tracks in both Ogg/Vorbis and MP3 formats. For example
.br
\fBabcde\fR requires the following backend tools to work:
.TP
.B *
-An Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A encoder or Opus encoder (oggenc, vorbize, lame, gogo, bladeenc, l3enc, mp3enc, flac, speexenc, mpcenc, faac, neroAacEnc, opusenc).
+An Ogg/Vorbis, MP3, FLAC, Ogg/Speex, MPP/MP+(Musepack), M4A encoder or Opus encoder
+(oggenc, vorbize, lame, gogo, bladeenc, l3enc, mp3enc, flac, speexenc, mpcenc, faac,
+neroAacEnc, fdkaac, opusenc).
.TP
.B *
An audio CD reading utility (cdparanoia, icedax, cdda2wav, pird,
.BR speexenc (1),
.BR mpcenc (1),
.BR faac (1),
+.BR fdkaac (1),
.BR id3 (1),
.BR eyeD3 (1),
.BR wget (1),