Encoding to WavPack with FFmpeg
authorAndrew Strong <andrew.david.strong@gmail.com>
Fri, 17 Jul 2015 01:05:13 +0000 (11:05 +1000)
committerAndrew Strong <andrew.david.strong@gmail.com>
Fri, 17 Jul 2015 01:05:13 +0000 (11:05 +1000)
Some slight changes to WavPack syntax with backward compatibility built
in for abcde 2.7. Suggested settings added to the FAQ doc:

   # WVENCODERSYNTAX=wavpack
   WVENCODERSYNTAX=ffmpeg
   # Appropriate PATH:
   WAVPACK=wavpack
   FFMPEG=ffmpeg
   # Appropriate options:
   FFMPEGENCOPTS="-c:a wavpack -compression_level 6"
   WAVPACKENCOPTS="-hx3"
   # Correct output type:
   OUTPUTTYPE="wv"

And repeated here :).

FAQ
abcde
abcde.1
abcde.conf
changelog

diff --git a/FAQ b/FAQ
index b9f42dd..45b8c5f 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -415,7 +415,31 @@ A. As of abcde 2.7.1 there are 3 ways to encode to alac: using qaac, refalac
    FFMPEGENCOPTS="-c:a alac"
    OUTPUTTYPE="m4a"
 
-  And then sit back and enjoy the music :) 
+   And then sit back and enjoy the music :)
+
+Q. Will FFmpeg be used with abcde for any other audio formats?
+A. The plan is to use FFmpeg (or avconv) when FFmpeg has a good quality native
+   encoder available. For example FFmpeg has a low quality native native encoder
+   for Vorbis and AAC which will not be used but a great reverse engineered alac
+   encoder that has been used in abcde. FFmpeg also has a good WavPack encoder
+   that has been added in abcde 2.7.1 which can be added into your ~/.abcde.conf
+   file as follows:
+
+   # WVENCODERSYNTAX=wavpack
+   WVENCODERSYNTAX=ffmpeg
+   # Appropriate PATH:
+   WAVPACK=wavpack
+   FFMPEG=ffmpeg
+   # Appropriate options:
+   FFMPEGENCOPTS="-c:a wavpack -compression_level 6"
+   WAVPACKENCOPTS="-hx3"
+   # Correct output type:
+   OUTPUTTYPE="wv"
+
+   You can see in this example how easy it is to switch from one WavPack encoder to
+   another by changing the comment mark '#' on the WVENCODERSYNTAX line. Plans are
+   to use FFmpeg for True Type Audio (tta) as well as MPEG-1 Audio Layer II (mp2) as
+   well as respectively ttaenc and twolame.
 
 5. USEPIPES
    ========
diff --git a/abcde b/abcde
index c7c5710..902319f 100755 (executable)
--- a/abcde
+++ b/abcde
@@ -1230,12 +1230,25 @@ do_encode ()
                                fi
                                ;;
                        wv)
-                               if [ "$DOTAG" = "y" ]; then
-                                       $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS -w Artist="$TRACKARTIST" -w Album="$DALBUM" \
-                                       -w Title="$TRACKNAME" -w Track="$1" -w Genre="$CDGENRE" -w Year="$CDYEAR" ${COMMENT:+-w Comment="$COMMENT"} "$IN" -o "$OUT"
-                               else
-                                       $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
-                               fi
+                       case "$WVENCODERSYNTAX" in
+                               wavpack)
+                                       if [ "$DOTAG" = "y" ]; then
+                                               $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS -w Artist="$TRACKARTIST" -w Album="$DALBUM" \
+                                               -w Title="$TRACKNAME" -w Track="$1" -w Genre="$CDGENRE" -w Year="$CDYEAR" ${COMMENT:+-w Comment="$COMMENT"} "$IN" -o "$OUT"
+                                       else
+                                               $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER $WVENCODEROPTS "$IN" -o "$OUT"
+                                       fi
+                               ;;
+                               ffmpeg)
+                                       if [ "$DOTAG" = "y" ]; then
+                                               $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER -i "$IN" $WVENCODEROPTS -metadata artist="$TRACKARTIST" \
+                                               -metadata album="$DALBUM" -metadata title="$TRACKNAME" -metadata track=${TRACKNUM:-$1} -metadata date="$CDYEAR" \
+                                               -metadata genre="$CDGENRE" -metadata comment="$COMMENT" "$OUT" 
+                                       else 
+                                               $RUN_COMMAND nice $EFFECTIVE_NICE $WVENCODER -i "$IN" $WVENCODEROPTS "$OUT"
+                                       fi
+                               ;;
+                       esac
                                ;;
                        ape)
                                $RUN_COMMAND nice $EFFECTIVE_NICE $APENCODER "$IN" "$OUT" $APENCODEROPTS
@@ -3456,7 +3469,10 @@ SPEEXENC=speexenc
 # mpc (Musepack)
 MPCENC=mpcenc
 # wv (wavpack)
+# WVENC is retained in abcde 2.7.1 for backwards compatibility
+# with abcde 2.7:
 WVENC=wavpack
+WAVPACK=wavpack
 # ape
 APENC=mac
 APETAG=apetag
@@ -3539,7 +3555,7 @@ SPEEXENCOPTS=
 # mpc
 MPCENCOPTS=
 # wv
-WVENCOPTS=
+WAVPACKENCOPTS=
 # ape
 # Monkey's Audio Console (mac) chokes without a mode setting
 # so we set one here.
@@ -4109,6 +4125,7 @@ do
                        [ "$WVENCODERSYNTAX" = "default" ] && WVENCODERSYNTAX=wavpack
                        [ "$DOTAG" = "y" ]
                        [ "$DOREPLAYGAIN" = "y" ] && NEEDWVGAIN=y
+                       [ "$WVENCODERSYNTAX" = "ffmpeg" ] && DOREPLAYGAIN=n
                        ;;
                ape)
                        [ "$APENCODERSYNTAX" = "default" ] && APENCODERSYNTAX=mac
@@ -4219,8 +4236,19 @@ case "$MPCENCODERSYNTAX" in
 esac
 case "$WVENCODERSYNTAX" in
        wavpack)
-               WVENCODEROPTS="${WVENCODEROPTSCLI:-$WVENCOPTS}"
-               WVENCODER="$WVENC"
+               # Syntax changed slightly between abcde 2.7 and abcde 2.7.1,
+               # and in the interests of backward compatibility:
+               if [ -z "$WAVPACKENCOPTS" ] && [ -n "$WVENCOPTS" ]; then
+                       WVENCODEROPTS="${WVENCODEROPTSCLI:-$WVENCOPTS}"
+                       WVENCODER="$WAVPACK"
+               else
+                       WVENCODEROPTS="${WVENCODEROPTSCLI:-$WAVPACKENCOPTS}"
+                       WVENCODER="$WAVPACK"
+               fi
+               ;;
+       ffmpeg)
+               WVENCODEROPTS="${WVENCODEROPTSCLI:-$FFMPEGENCOPTS}"
+               WVENCODER="$FFMPEG"
                ;;
 esac
 case "$APENCODERSYNTAX" in
diff --git a/abcde.1 b/abcde.1
index 4d302b4..bd8cbfe 100644 (file)
--- a/abcde.1
+++ b/abcde.1
@@ -336,7 +336,7 @@ are Windows applications which require Wine to be installed.
 .TP
 .B WVENCODERSYNTAX
 Specifies the style of encoder to use for WavPack. We support \'wavpack\'
-as \'default\'.
+as \'default\' but \'ffmpeg'\ is the other option.
 .TP
 .B APENCODERSYNTAX
 Specifies the style of encoder to use for Monkey's Audio (ape). We support \'mac\',
@@ -382,7 +382,7 @@ with \fBdistmp3\fR (DISTMP3NICE).
 .B PATHNAMES
 The following configuration file options specify the pathnames of their
 respective utilities: LAME, TOOLAME, GOGO, BLADEENC, L3ENC, XINGMP3ENC, MP3ENC,
-VORBIZE, OGGENC, FLAC, SPEEXENC, MPCENC, WVENC, APENC, OPUSENC, ID3, EYED3,
+VORBIZE, OGGENC, FLAC, SPEEXENC, MPCENC, WAVEPACK, APENC, OPUSENC, ID3, EYED3,
 METAFLAC, CDPARANOIA, CD_PARANOIA, CDDA2WAV, PIRD, CDDAFS, CDDISCID, CDDBTOOL, 
 EJECT, MD5SUM, DISTMP3, VORBISCOMMENT, NORMALIZE, CDSPEED, MP3GAIN, VORBISGAIN, 
 MPCGAIN, MKCUE, MKTOC, CUE2DISCID (see option "\-X"), DIFF, HTTPGET, GLYRC,
@@ -391,7 +391,7 @@ IDENTIFY, DISPLAYCMD, CONVERT, QAAC, WINE, FHGAACENC, ATOMICPARSLEY and FFMPEG.
 .B COMMAND-LINE OPTIONS
 If you wish to specify command-line options to any of the programs \fBabcde\fR uses,
 set the following configuration file options: LAMEOPTS, TOOLAMEOPTS, GOGOOPTS,
-BLADEENCOPTS, L3ENCOPTS, XINGMP3ENCOPTS, MP3ENCOPTS, VORBIZEOPTS, WVENCOPTS, APENCOPTS,
+BLADEENCOPTS, L3ENCOPTS, XINGMP3ENCOPTS, MP3ENCOPTS, VORBIZEOPTS, WAVEPACKENCOPTS, APENCOPTS,
 OGGENCOPTS, FLACOPTS, SPEEXENCOPTS, MPCENCOPTS, FAACENCOPTS, NEROAACENCOPTS, FDKAACENCOPTS, 
 OPUSENCOPTS, ID3OPTS, EYED3OPTS, MP3GAINOPTS, CDPARANOIAOPTS, CDDA2WAVOPTS, PIRDOPTS, 
 CDDAFSOPTS, CDDBTOOLOPTS, EJECTOPTS, DISTMP3OPTS, NORMALIZEOPTS, CDSPEEDOPTS, MKCUEOPTS, 
@@ -429,7 +429,7 @@ 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" (AAC or ALAC),
-"wv" (WavPack", "wav" (Microsoft Waveform) or "opus" (Opus Interactive Audio Codec). Values
+"wv" (WavPack"), "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
 OUTPUTTYPE=vorbis,flac
index 1f4ed67..97de2c0 100644 (file)
@@ -62,7 +62,7 @@
 # flac - the only supported for FLACENCODERSYNTAX at the moment
 # speexenc - the only encoder for SPEEXENCODERSYNTAX
 # mpcenc - encoder for MPCENCODERSYNTAX
-# wavpack - encoder for WVENCODERSYNTAX
+# wavpack, ffmpeg - encoder for WVENCODERSYNTAX
 # mac - for APENCODERSYNTAX
 # faac, neroAacEnc, fdkaac, qaac, fhgaacenc, ffmpeg - for AACENCODERSYNTAX
 # opusenc - for OPUSENCODERSYNTAX
 # WavPack:
 # Look at 'wavpack --help' for detailed options, consider using '-hx3' 
 # for a good quality encode
-#WVENCOPTS=
+#WAVENCOPTS=
+# FFmpeg can also be used for WavPack encoding and for this consider
+# setting the following with a compression_level between 0-8:
+#FFMPEGENCOPTS="-c:a wavpack -compression_level 6" 
 # For Wavpack replay gain we set both the default of 'track gain' 
 # as well as this option for 'album gain'. Better media players
 # such as vlc can select either or neither.    
index 9993db2..d55cfdf 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,5 +1,7 @@
 abcde 2.7.1
 
+  * Encoding to WavPack with FFmpeg. Some slight changes to WavPack
+    syntax with backward compatibility built in for abcde 2.7. 
   * Encoding to m4a container with FFmpeg or avconv. This allows
     for alac encoding with FFmpeg's reverse engineered alac encoder.
   * AAC encoding with fhgaacenc via Wine. Tagging is provided