2017/09/07

AAC を MP3 に変換する

Mac では通常だとオーディオファイルは AAC 形式か ALAC 形式で保存していて、ファイルの拡張子は通常 "m4a" を利用している。
これらのファイルを一般的な mp3 形式に変換する場合、特に Mac では iTunes などの GUI アプリケーションを利用するのが普通なのだが、 多数のファイルを一括で変換する場合など GUI アプリケーションだと操作が面倒になる。
そこで、 AAC 形式のオーディオファイルを mp3 形式に変換するスクリプトを作ってみた。 オーディオファイルを mp3 形式に変換するコマンドはいくつも存在するが、今回は Mac で導入が簡単な lame を利用する。 lame は AAC 形式や ALAC 形式には対応していないので、こちらも Mac で導入が簡単な faad を利用して AAC / ALAC 形式のオーディオファイルを 一度 wav 形式に変換してから lame を利用して mp3 形式に変換する。

利用の前提として faad と lame が必要なので、それぞれを MacPorts や Homebrew によりインストールする。

$ sudo port install faad2 lame
:
:
--->  Fetching archive for faad2
--->  Attempting to fetch faad2-2.7_0.darwin_16.x86_64.tbz2 from http://kmq.jp.packages.macports.org/faad2
--->  Attempting to fetch faad2-2.7_0.darwin_16.x86_64.tbz2.rmd160 from http://kmq.jp.packages.macports.org/faad2
--->  Installing faad2 @2.7_0
--->  Activating faad2 @2.7_0
--->  Cleaning faad2
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.
    

次に PATH が通ったディレクトリに以下のスクリプトを設置して適切な実行権限を付与しておく。
このスクリプトでは AAC / ALC 形式と mp3 形式が混在している事を想定しており、 mp3 ファイルの場合はそのままコピーする様にしている。

  1#!/bin/sh
  2# mp3 ファイルを格納するためのディレクトリ
  3top="${HOME}/mp3"
  4
  5find . | while read line
  6do
  7    if [ -d "${line}" ]
  8    then
  9        mkdir -p "${top}/${line}"
 10    else
 11        dst=${top}/$(echo "${line}" | sed 's/m4a/mp3/')
 12        if [ "${line##*.}" = "m4a" ]
 13        then
 14            wav=${top}/$(echo "${line}" | sed 's/m4a/wav/')
 15            faad -q "${line}" -o "${wav}"
 16            lame --quiet -h -b 192 "${wav}" "${dst}"
 17            rm "${wav}"
 18        else
 19            cp "${line}" "${dst}"
 20        fi
 21    fi
 22done
    
準備ができたらオーディオファイルが格納されているディレクトリでスクリプトを実行すれば mp3 形式のオーディオファイルが作成される。
以下の例ではファイル名を convert.sh として ${HOME}/bin 以下に設置している。
$ vi $HOME/bin/convert.sh
$ chmod 755 $HOME/bin/convert.sh
$ cd $HOME/Music/iTunes/iTunes\ Music
$ convert.sh
    

トラックバック
https://blog.bsdhack.org/index.cgi/Computer/20170907.trackback
コメント














メッセージ: Ready to post a comment.