2013年11月8日金曜日

abcdeでqaacを使ってリッピングする

前回ではqaacがシェルから使えるようにしました。その続きです。


次にabcdeとatomicparsleyをいれます。これはA Better CD Encoderの略で、cddbからのタグ取得とリッピングとエンコードを一気にやってくれます。サイコーです。atomicparsleyはaacエンコードをした際にabcdeでのタグ付けに必要なようです。

# aptitude install abcde atomicparsley

abcdeはAACエンコーダがfaacしか使えないのですが、実はシェルスクリプトなのでqaacが使えるように弄れます。弄ってうまくいったのでパッチを作りました。パッチを当てられるようにpatchコマンドもいれます。

# aptitude install patch

abcde.patch

--- abcde.orig 2012-09-18 22:51:23.000000000 +0900
+++ abcde 2013-11-08 03:50:05.355956207 +0900
@@ -1154,7 +1154,9 @@
     ;;
    m4a)
     # Tag the file at encode time, as it can't be done after encoding.
-    if [ "$DOTAG" = "y" ]; then
+    if [ "$AACENC" = "qaac" ]; then
+     $RUN_COMMAND nice $ENCNICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --date "$CDYEAR" "$IN" -o "$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
@@ -3869,6 +3871,10 @@
   AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
   AACENCODER="$AACENC"
   ;;
+ qaac)
+  AACENCODEROPTS="${AACENCODEROPTSCLI:-$AACENCOPTS}"
+  AACENCODER="$AACENC"
+  ;;
 esac
 
 # and which tagger

# patch /usr/bin/abcde < abcde.patch
設定ファイルはホームディレクトリでも読んでくれるのでコピーします。
$ cp /etc/abcde.conf ~/.abcde.conf

あとはabcdeがqaacを使うように設定します。一応私の設定とデフォルトの差分を載せておきます。

abcde.conf.diff

--- abcde.conf 2012-09-18 22:51:23.000000000 +0900
+++ .abcde.conf 2013-11-08 21:57:47.090984769 +0900
@@ -12,6 +12,7 @@
 # If you just wanted to use a proxy server, just set your http_proxy
 # environment variable - wget will use it correctly.
 #CDDBURL="http://freedb.freedb.org/~cddb/cddb.cgi"
+CDDBURL="http://freedbtest.dyndns.org/~cddb/cddb.cgi"
 
 # The CDDB protocol level.
 # Right now 5 is latin1 output and 6 is UTF8 encoding.
@@ -70,6 +71,7 @@
 #SPEEXENCODERSYNTAX=default
 #MPPENCODERSYNTAX=default
 #AACENCODERSYNTAX=default
+AACENCODERSYNTAX=qaac
 
 # Specify the syntax of the normalize binary here - so far only 'normalize'
 # is supported.
@@ -128,6 +130,7 @@
 #SPEEXENC=speexenc
 #MPPENC=mppenc
 #AACENC=faac
+AACENC=qaac
 
 #ID3=id3
 #ID3V2=id3v2
@@ -186,6 +189,7 @@
 
 # M4A/AAC
 #AACENCOPTS=
+AACENCOPTS="--cvbr 192 -q 2"
 
 #ID3OPTS=
 #ID3V2OPTS=
@@ -239,6 +243,7 @@
 # OUTPUTTYPE can be either "ogg", "mp3", "flac" or "spx", or a combination
 # of them separated with ",": "ogg,mp3".
 #OUTPUTTYPE=ogg
+OUTPUTTYPE=m4a
 
 # Output filename format - change this to reflect your inner desire to
 # organize things differently than everyone else :)
@@ -251,9 +256,10 @@
 # to the files. Remove it from your user defined string if you are getting
 # files like ".ogg.ogg".
 #OUTPUTFORMAT='${ARTISTFILE}-${ALBUMFILE}/${TRACKNUM}.${TRACKFILE}'
+OUTPUTFORMAT='${ALBUMFILE}/${TRACKNUM} ${TRACKFILE}'
 
 # Like OUTPUTFORMAT but for Various Artists discs.
 #VAOUTPUTFORMAT='Various-${ALBUMFILE}/${TRACKNUM}.${ARTISTFILE}-${TRACKFILE}'
+VAOUTPUTFORMAT='${ALBUMFILE}/${TRACKNUM} ${TRACKFILE}'
 
 # Like OUTPUTFORMAT and VAOUTPUTFORMAT but for the ONEFILE rips.
 #ONETRACKOUTPUTFORMAT=$OUTPUTFORMAT
@@ -305,6 +311,10 @@
 #{
 # echo "$@" | sed s,:,\ -,g | tr \ / __ | tr -d \'\"\?\[:cntrl:\]
 #}
+mungefilename ()
+{
+ echo "$@" | sed s,:,\ -,g | tr / \  | tr -d \'\"\?\[:cntrl:\]
+}
 
 # Custom genre munging:
 # By default we just transform uppercase to lowercase. Not much of a fancy
@@ -359,6 +369,7 @@
 # If you'd like to have abcde eject the cdrom after all the tracks have been
 # read, uncomment the following line.
 #EJECTCD=y
+EJECTCD=y
 
 # To encode on the remote machines foo, bar, baz, quux, and qiix, as well as
 # on the local machine (requires distmp3 to be installed on local machine and

これでひと通り終わりました。お疲れ様です。

音楽CDを挿入してabcdeと唱えればあとは分かります。

エンコードオプションは.abcde.confの186行目付近のAACENCOPTSで変えられます。なんで--cvbr 192なのかというのも前回紹介したkamedoさんのサイトで分かります。自分でテストしたわけじゃないのですが。

AACとWMAの音質比較 - Kamedoの音風景

ちなみにabcdeではファイル名にスペースやスラッシュが使われる場合アンダーバーに置き換えられるのですが、これも.abcde.confの設定を変えることでできます。311行目付近の関数mungefilename内のtrコマンドが使われているところです。ここを

#mungefilename ()
#{
#echo "$@" | sed s,:,\ -,g | tr \ / __ | tr -d \'\"\?\[:cntrl:\]
#}
から
mungefilename ()
{
echo "$@" | sed s,:,\ -,g | tr / \  | tr -d \'\"\?\[:cntrl:\]
}
とかに変えればいいわけです。あとは色々好きにしてください。


それでは。


[追記:2013/12/12]
諸々の変更や記事名の変更をしました。