Support usage of Matroska container (mka)
authorAndrew Strong <andrew.david.strong@gmail.com>
Fri, 1 Jan 2016 05:42:49 +0000 (16:42 +1100)
committerAndrew Strong <andrew.david.strong@gmail.com>
Fri, 1 Jan 2016 05:42:49 +0000 (16:42 +1100)
Support is added for output to the Matroska container (mka). The
encoder/muxer is FFmpeg (or avconv). Typical ~/.abcde.conf file
syntax would be:

 MKAENCODERSYNTAX=ffmpeg
 FFMPEG=ffmpeg
 FFMPEGENCOPTS="-c:a ac3 -b:a 448k"
 OUTPUTTYPE="mka"

Thanks to Shantiq and Fakeoutdoorsman of the Ubuntu Forums
for the idea!

FAQ
abcde
abcde.1
abcde.conf
changelog

diff --git a/FAQ b/FAQ
index d72dd1c..eda02e1 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -451,7 +451,18 @@ A. The plan is to use FFmpeg (or avconv) when FFmpeg has a good quality native
    OUTPUTTYPE="mp2"
    
    So currently FFmpeg supports: alac, wavpack and mp2. FFmpeg native aac support will
-   be added when it comes out of 'experimental'.
+   be added when it comes out of 'experimental'. FFmpeg is also used as the default
+   encoder for the Matroska or mka container. A typical example, using the FFmpeg
+   native ac3 encoder, is:
+
+   MKAENCODERSYNTAX=ffmpeg
+   FFMPEG=ffmpeg
+   FFMPEGENCOPTS="-c:a ac3 -b:a 448k"
+   OUTPUTTYPE="mka"
+
+   Other suitable codecs for this usage are Vorbis, MP2, MP3, LC-AAC, HE-AAC, WMAv1,
+   WMAv2, eAC3 and Opus. There is much more to come in the future for abcde and FFmpeg!
+
 
 5. USEPIPES
    ========
diff --git a/abcde b/abcde
index ece4f7d..949b184 100755 (executable)
--- a/abcde
+++ b/abcde
@@ -47,7 +47,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 <type1[,type2]...>"
-echo "       Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,wv,ape,mp2,tta). Defaults to vorbis"
+echo "       Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,mka,wv,ape,mp2,tta). 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 "-r <host1[,host2]...>"
@@ -936,6 +936,9 @@ do_tag ()
                opus)
                        run_command tagtrack-$OUTPUT-$1 true
                        ;;
+               mka)
+                       run_command tagtrack-$OUTPUT-$1 true
+                       ;;
                flac)
                        (
                        echo ARTIST="$TRACKARTIST"
@@ -1106,6 +1109,9 @@ do_encode ()
                        opus)
                                TEMPARG="PIPE_$OPUSENCODERSYNTAX"
                                ;;
+                       mka)
+                               TEMPARG="PIPE_$MKAENCODERSYNTAX"
+                               ;;
                        flac)
                                TEMPARG="PIPE_$FLACENCODERSYNTAX"
                                ;;
@@ -1143,6 +1149,9 @@ do_encode ()
                                opus)
                                        OUTPUT=$OPUSOUTPUTCONTAINER
                                        ;;
+                               mka)
+                                       OUTPUT=$MKAOUTPUTCONTAINER
+                                       ;;
                                flac)
                                        OUTPUT=$FLACOUTPUTCONTAINER
                                        ;;
@@ -1218,6 +1227,19 @@ do_encode ()
                                        ;;
                                esac
                                ;;
+                       mka)
+                               case "$MKAENCODERSYNTAX" in
+                               ffmpeg)
+                                       if [ "$DOTAG" = "y" ]; then
+                                               $RUN_COMMAND nice $EFFECTIVE_NICE $MKAENCODER -i "$IN" $MKAENCODEROPTS -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 $MKAENCODER -i "$IN" $MKAENCODEROPTS "$OUT"
+                                       fi
+                               ;;
+                               esac
+                               ;;
                        flac)
                                case "$2" in
                                %local*%)
@@ -1585,6 +1607,9 @@ do_move ()
                                opus)
                                        OUTPUT=$OPUSOUTPUTCONTAINER
                                        ;;
+                               mka)
+                                       OUTPUT=$MKAOUTPUTCONTAINER
+                                       ;;
                                flac)
                                        OUTPUT=$FLACOUTPUTCONTAINER
                                        ;;
@@ -1669,6 +1694,9 @@ do_playlist ()
                        opus)
                                OUTPUT=$OPUSOUTPUTCONTAINER
                                ;;
+                       mka)
+                               OUTPUT=$MKAOUTPUTCONTAINER
+                               ;;
                        flac)
                                OUTPUT=$FLACOUTPUTCONTAINER
                                ;;
@@ -3489,6 +3517,7 @@ ENCODERSYNTAX=default
 MP3ENCODERSYNTAX=default
 OGGENCODERSYNTAX=default
 OPUSENCODERSYNTAX=default
+MKAENCODERSYNTAX=default
 FLACENCODERSYNTAX=default
 SPEEXENCODERSYNTAX=default
 MPCENCODERSYNTAX=default
@@ -4158,6 +4187,7 @@ case "$OUTPUTTYPE" in *:*)
                case "$OUTPUT" in
                        vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
                        opus:*) OPUSENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;;
+                       mka:*)  MKAENCODEROPTSCLI="$( 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- )" ;;
@@ -4197,6 +4227,10 @@ do
                        [ "$OPUSENCODERSYNTAX" = "default" ] && OPUSENCODERSYNTAX=opusenc
                        OPUSOUTPUTCONTAINER=opus
                        ;;
+               mka)
+                       [ "$MKAENCODERSYNTAX" = "default" ] && MKAENCODERSYNTAX=ffmpeg
+                       MKAOUTPUTCONTAINER=mka
+                       ;;
                mp3)
                        [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame
                        [ "$DOTAG" = "y" ] && NEEDTAGGER=y
@@ -4305,6 +4339,12 @@ case "$OPUSENCODERSYNTAX" in
                OPUSENCODER="$OPUSENC"
                ;;
 esac
+case "$MKAENCODERSYNTAX" in
+       ffmpeg)
+               MKAENCODEROPTS="${MKAENCODEROPTSCLI:-$FFMPEGENCOPTS}"
+               MKAENCODER="$FFMPEG"
+               ;;
+esac
 case "$FLACENCODERSYNTAX" in
        flac)
                FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}"
@@ -4603,6 +4643,8 @@ if [ "$USEPIPES" = "y" ]; then
                        PIPEENCODERSVARCHECK="PIPE_$OGGENCODERSYNTAX" ;;
                opus)
                        PIPEENCODERSVARCHECK="PIPE_$OPUSENCODERSYNTAX" ;;
+               mka)
+                       PIPEENCODERSVARCHECK="PIPE_$MKAENCODERSYNTAX" ;;
                flac)
                        PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;;
                spx)
@@ -4636,7 +4678,7 @@ fi
 
 # Make sure a buncha things exist
 for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \
-       $OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
+       $OGGENCODER $OPUSENCODER $MKAENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \
        $AACENCODER $WVENCODER $CDDBTOOL $APENCODER $MP2ENCODER $TTAENCODER \
        ${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \
        ${NEEDCOMMENTER+$VORBISCOMMENT} ${NEEDMETAFLAC+$METAFLAC} \
diff --git a/abcde.1 b/abcde.1
index fd9ce13..2afab02 100644 (file)
--- a/abcde.1
+++ b/abcde.1
@@ -147,9 +147,9 @@ Non interactive mode. Do not ask anything from the user. Just go ahead.
 .TP
 .B \-o [filetype][:filetypeoptions]
 Select output type. Can be "vorbis" (or "ogg"), "mp3", "flac", "spx", "mpc", "m4a", 
-"wav", "wv", "ape" or "opus".  Specify a comma-delimited list of output types to obtain
-all specified types.  See the OUTPUTTYPE configuration variable. One can pass
-options to the encoder for a specific filetype on the command line separating
+"wav", "wv", "ape", "opus" or "mka".  Specify a comma-delimited list of output types
+to obtain all specified types.  See 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
@@ -227,7 +227,8 @@ Each track is, by default, placed in a separate file named after the track in a
 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', '.wav', 'wv', 'ape' or '.opus'.
+format, 'vorbis' for '.ogg', '.mp3', '.flac', '.spx', '.mpc', '.wav', '.wv',
+'.ape', '.opus' or '.mka'.
 .SH CONFIGURATION
 \fBabcde\fR sources two configuration files on startup - \fI/etc/abcde.conf\fR and
 \fI$HOME/.abcde.conf\fR, in that order.
@@ -355,6 +356,12 @@ Monkey's Audio Console, as \'default\'.
 Specifies the style of encoder to use for the Opus encoder. At this point only
 \'opusenc\' is available for Opus encoding.
 .TP
+.B MKAENCODERSYNTAX
+Specifies the style of encoder to use for the Matroska or mka container. At this
+point only \'ffmpeg\' is available to utilise the mka container. Safe audio codecs
+for mka include Vorbis, MP2, MP3, LC-AAC, HE-AAC, WMAv1, WMAv2, AC3, eAC3 and Opus.
+See the FAQ document for more information.
+.TP
 .B NORMALIZERSYNTAX
 Specifies the style of normalizer to use.  Valid options are \'default\'
 and \'normalize'\ (and both run \'normalize-audio\'), since we only support it,
@@ -440,16 +447,16 @@ encoder. Defaults to "vorbis". Valid settings are "vorbis" (or "ogg")
 (Ogg/Vorbis), "mp3" (MPEG-1 Audio Layer III), "flac" (Free Lossless Audio
 Codec), "mp2" (MPEG-1 Audio Layer III), "spx" (Ogg/Speex), "mpc" (MPP/MP+ (Musepack),
 "m4a" (AAC or ALAC),"wv" (WavPack"), "wav" (Microsoft Waveform), "opus"
-(Opus Interactive Audio Codec) or "tta" (True Audio). Values like "vorbis,mp3"
-encode the tracks in both Ogg/Vorbis and MP3 formats. For example:
+(Opus Interactive Audio Codec), "tta" (True Audio) or "mka" (Matroska). Values like
+"vorbis,mp3" encode the tracks in both Ogg/Vorbis and MP3 formats. For example:
 .br
 OUTPUTTYPE=vorbis,flac
 .br
 For each value in OUTPUTTYPE, \fBabcde\fR expands a different process for encoding,
 tagging and moving, so you can use the format placeholder, OUTPUT, to create
 different subdirectories to hold the different types. The variable OUTPUT will
-be 'vorbis', 'mp3', 'flac', 'spx', 'mpc', 'm4a', mp2, 'wv', 'ape', 'tta' and/or 'wav',
-depending on the OUTPUTTYPE you define. For example
+be 'vorbis', 'mp3', 'flac', 'spx', 'mpc', 'm4a', mp2, 'wv', 'ape', 'tta', 'wav'
+and/or 'mka' depending on the OUTPUTTYPE you define. For example
 .br
 OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM}._${TRACKFILE}'
 .TP
index 7563a96..ddbbf41 100644 (file)
@@ -1,4 +1,4 @@
-# System defaults for abcde version 2.7.1
+# System defaults for abcde version 2.7.2
 # Nothing in this file is uncommented by default.
 #
 # If you wish to override these system-wide settings, create your own
@@ -76,6 +76,7 @@
 #OGGENCODERSYNTAX=default
 #FLACENCODERSYNTAX=default
 #SPEEXENCODERSYNTAX=default
+#MKAENCODERSYNTAX=default
 #MPCENCODERSYNTAX=default
 #WVENCODERSYNTAX=default
 #APENCODERSYNTAX=default
 # 'twolame --help',a highly recommended setting is "--bitrate 320".
 #TWOLAMENCOPTS=
 
-# FFmpeg or avconv can be used for several audio codecs:
+# FFmpeg or avconv can be used for several audio codecs, as well as being
+# the default encoder for the Matroska container mka::
 # 1. Encoding to WavPack (FFmpeg only: avconv does not have a native encoder).
 #    Consider setting the following with a compression_level between 0-8:
 #    FFMPEGENCOPTS="-c:a wavpack -compression_level 6"
 # OUTPUTTYPE can be any of a number of formats, either a single format
 # (e.g. "ogg") or a combination of them separated with ","
 # (e.g. "flac,mp3"). Currently recognised and supported are:
-# "flac", "m4a", "mp3, "mpc", "ogg", "opus", "spx", "vorbis", "wav", "wv", "ape"
+# "flac", "m4a", "mp3, "mpc", "ogg", "opus", "mka", "spx", "vorbis", "wav", "wv", "ape"
 #OUTPUTTYPE=ogg
 
 # Output filename format - change this to reflect your inner desire to
index 7e65bd3..f26120d 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,5 +1,15 @@
 abcde 2.7.2
 
+  * Support for output to the Matroska container (mka). Encoder
+    is FFmpeg (or avconv). Typical conf file syntax would be:
+
+     MKAENCODERSYNTAX=ffmpeg
+     FFMPEG=ffmpeg
+     FFMPEGENCOPTS="-c:a ac3 -b:a 448k"
+     OUTPUTTYPE="mka"
+
+    Thanks to Shantiq and Fakeoutdoorsman of the Ubuntu Forums
+    for the idea.
   * Add id3tag mp3 tagger as this is the tagger available to
     OpenBSD users. Thanks to Christopher Zimmermann for the
     notification and patch.