Automator と ffmpeg を使って Finder の選択項目から音声を抜き出したりするためのシェルスクリプトを考えてみた。サービスとして登録し、Finder のコンテキストメニューから呼び出せばターミナル上で ffmpeg を使って処理を行う。拡張子抽出部分はテストソースがあまりなかったのでもしかしたら失敗するかも。
オーディオ抽出
動画からオーディオを抽出する。拡張子はソースのオーディオファイル形式を検索して付与する。最近の動画は AAC を使っていることが多いのでそのまま抜き出しても iTunes に登録できないため後述のコンテナ化を使用。
# template: services # source: file or directory # mode: stdin while read f do [ ! -f "$f" ] && continue extension=`ffmpeg -i "$f" 2>&1 | egrep -o "Audio: \w+" | cut -d' ' -f2` printf 'ffmpeg -i "%s" -vn -acodec copy "%s"\n' "$f" "$f".$extension done > ${S:=/tmp/ffmpeg_$$} echo "afplay /System/Library/Sounds/Hero.aiff" >> $S chmod +x $S; open $S
オーディオ抽出 + MP4 コンテナ化
オーディオ抽出後、AAC であればそのままコンテナ化し、AAC 以外なら変換してからコンテナ化する。別途、faac が必要。
# template: services # source: file or directory # mode: stdin while read f do [ ! -f "$f" ] && continue case `ffmpeg -i "$f" 2>&1 | egrep -o "Audio: \w+" | cut -d' ' -f2` in aac) printf 'ffmpeg -i "%s" -vn -acodec copy "%s"\n' "$f" "$f".m4a ;; *) printf 'ffmpeg -i "%s" -vn -acodec libfaac -ac 2 -ar 48000 -aq 100 "%s"\n' "$f" "$f".m4a ;; esac done > ${S:=/tmp/ffmpeg_$$} echo "afplay /System/Library/Sounds/Hero.aiff" >> $S chmod +x $S; open $S