mattintosh note

どこかのエンジニアモドキの備忘録

OS X で Nero AAC Encoder を使う

libfaac の音質がイマイチなので Nero AAC Encoder を。と言っても OS X 用は無いので Wine 経由で。

必要なもの

Nero AAC Codec は /usr/local あたりに解凍しておく。

AppleScript で変換用アプリを作成する

アプリアイコンをクリックすると Finder の選択項目を Nero AAC Codec で変換するアプリを作成する。

  • do shell script 内に AppleScript の変数を埋め込むのは面倒なので関数を作成して引数で渡す。
  • Nero AAC Codec 用の WINEPREFIX を作成する。
  • リスト選択ダイアログで品質設定をするようにすると面白いかも。
-- 空のリストを作成
set aList to {}

-- Finder の選択項目を取得し、クオート付き POSIX パスでリストに追加
tell application "Finder" to repeat with f in selection as alias list
    set end of aList to quoted form of POSIX path of f
end repeat

-- デリミタをスペースに変更
set text item delimiters of AppleScript to space

-- スクリプトを作成し、引数にリストの値を設定する
set cmd to "
func (){
  export PATH=/opt/local/bin:/opt/local/sbin:$PATH
  export WINEPREFIX=$HOME/.neroaac
  for f
  do
      [ -f \"${f}\" ] && echo ${f} || continue
      /opt/local/bin/wine /usr/local/neroaacenc/neroAacEnc.exe -q 0.5 -if \"${f}\" -of \"${f}\".mp4 || return
  done
  exit
}
func" & space & aList

-- ターミナル.app を呼び出してコマンドを実行させる
tell application "Terminal" to activate (do script cmd)

sh-s オプションで引数渡してヒアドキュメントでシェルスクリプトを書いてもいいかもしれない。

set cmd to "<<'__EOS__' exec sh -s" & space & aList & "
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export WINEPREFIX=$HOME/.neroaac
for f
do
    [ -f \"${f}\" ] && echo ${f} || continue
    /opt/local/bin/wine /usr/local/neroaacenc/neroAacEnc.exe -q 0.5 -if \"${f}\" -of \"${f}\".mp4 || return
done
exit
__EOS__"

AppleScript & Python

AppleScript 内でシェルスクリプトなどを書くときは "(ダブルクオート)の扱いが不便。Python ならシングルクオートだけで書けるのでちょっと楽かも。

set aList to {}
tell application "Finder" to repeat with f in selection as alias list
    set end of aList to quoted form of POSIX path of f
end repeat
set text item delimiters of AppleScript to space

set cmd to "<<'__EOS__' exec python -" & space & aList & "
import os
import subprocess
import sys

wine = '/opt/local/bin/wine'
nero = '/usr/local/neroaacenc/neroAacEnc.exe'
q    = '0.5'

os.environ['PATH']       = os.path.dirname(wine) + os.getenv('PATH')
os.environ['WINEPREFIX'] = os.path.expanduser('~/.neroaac')

for f in sys.argv[1:]:
    src = f
    dst = os.path.splitext(f)[0] + '.mp4'
    cmd = [wine, nero, '-q', q, '-if', src, '-of', dst]
    print src, '->', dst
    subprocess.call(cmd)
__EOS__"

tell application "Terminal" to activate (do script cmd)

初めてのFlash Video

初めてのFlash Video

FFmpegで作る動画共有サイト

FFmpegで作る動画共有サイト

Ffmpeg

Ffmpeg