2013年5月25日土曜日

LAME mp3 エンコーダーを使う(1)

音楽圧縮フォーマットはaacが全盛なこんにちであるが、敢えてMacでLAME mp3 エンコーダーを使う手順を説明したい。

概要は以下の手順になる。

  1. LAME mp3 エンコーダーのインストール
  2. iTunesを利用したAppleScriptで連続(=バッチ)エンコードする

以下、手順を具体的に説明する。今回はLAME mp3 エンコーダーのインストールまでを説明する。

  1. LAME mp3 エンコーダーのインストール
    ターミナル.appを用いて、LAMEのソースコードを入手、コンパイル、インストールする。(以下の通りターミナル.appでコマンドを入力する)

    curl -L -O http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz
    tar xf lame-3.99.5.tar.gz
    cd lame-3.99.5
    ./configure
    make
    sudo make install
    

この時点でLAME mp3 エンコーダーを用いて音楽を高品質に圧縮することができる。

  1. オーディオ CDを光学ドライブにセットしてFinderに表示させる。
  2. ターミナル.appにlame␣--preset␣extreme␣(lame, --preset, extremeの間は半角スペースで区切り、extremeの後ろは半角スペースを1個入力する)と入力。

    lame --preset extreme␣
    
    lame preset extreme
    LAMEエンコード品質の設定
  3. Finderに表示されている曲(aiffフォーマット)をターミナル.appのウインドウにドラッグ&ドロップする。

    Drag and Drop
    Finderから音楽ファイルをドラッグ&ドロップ
  4. 出力ファイル名を設定する。

    lame --preset extreme /Volumes/オーディオ\ CD/1\ オーディオ トラック.aiff Desktop/test.mp3
    
    set output file name
    出力ファイル名を設定
  5. LAMEによるエンコードが行われる。

    Encode_with_LAME
    LAMEによるエンコードの例

次回、iTunesとAppleScriptを用いて連続(=バッチ)エンコードする方法を説明する。

2013年5月13日月曜日

Mail.appの体力を知る

2013.5.26大幅内容修正。

Mac OS X (現行10.8.xではOS Xと呼称する…つまりこのOSはMacではないのだ(笑))にはMail.appというメール送受信ソフト(メールクライアントソフト)が標準で添付されている。
このMail.appがあるおかげで、Mac OS X用のメールクライアントソフトは、無料では他に選択肢がThunderbirdぐらいしかない状況だ。そのくらいOS標準添付というのはシェア力が強いのである。

さて、このMail.appは、どのくらいの体力があるのだろうか? と言うとおかしく聞こえるかもしれないが、どのくらいの数のアカウントがあっても正常に動作するかという意味だ。
つまり、筆者の環境(アカウント数)では正常とは言えない動作をしている。アカウントの数はPOPが2個、IMAPが8個の合計10個だ。
(なぜ、こんなにアカウントを持っているかと言うと、それは筆者がPostPetを愛用していたせいだ。Webメール版以前のPostPetを使っていたユーザーは、概ねメールアカウントをたくさん持っているはずだ)

どんなことが起きるかと言うと、メールの送受信の遅れ受信は最大で半日以上遅れる。Webメール上で確認すると、すぐに届いているが、Mail.appではメールが受信されない)、動作していたアカウントが突然パスワードが通らなくなるアカウントが突然オフラインになる、ゴミ箱にメールが移動しないゴミ箱の中のメールが削除できない迷惑メールを迷惑メールフォルダに移動する設定にしていても移動されない迷惑メールフォルダのメールが削除できないなどがあげられる。そしてこれらの現象はMail.appを再起動することで解消する。

Appleのサポートに問い合わせたところ、原因はアカウントの数が多すぎるためだとのたまった。では適切なアカウント数はいくつかと聞いたら4個〜5個とのことだった。(サポート上席担当談
再起動直るならバグではないというのがAppleの公式見解と言うことだ。

本当だろうか?

ほんのわずかでもプログラミングに携わったことがあれば百も承知していることだが、プログラムというのは通常同じことを繰り返して行うことが面倒なのでコンピューターに処理させようという目的で書かれる。
言い換えればn=1の時に正しく動作するプログラムがn=10の処理に耐えられないというのは通常あり得ない。なぜならば、n=10の処理はn=1の処理を単純10回繰り返せば良いだけの話なのだから。

いかがだろうか? メールなんてウェブメールで十分と言う方には関係ないかも知れないが、Mail.appがMac OS Xに標準添付されるにふさわしい物になって欲しいと考える方もいるのではないだろうか?
心ある方のフィードバックを切に望んでやまない。下記リンクが窓口である。

2014.12.31改訂
ここに指摘した現象はMac OS X 10.9.4以降のメール.appでは改善され、問題ないレベルになっている。YosemiteではBetaの時に先祖帰りして、これらの問題が復活した。製品版Yosemiteは使っていないので不明。

2013年5月4日土曜日

ffmpegでDVDの字幕を焼き込む方法

ffmpegを用いてDVDのビットマップ字幕を動画に焼き込む方法(ハードコードする方法)を説明したい。はじめに断っておくが、これは暫定仕様だそうだ。(いつになるか分からないが)ビットマップ字幕に正式に対応したら、使えなくなる方法である。またDVDの違法コピーは法律で禁止されているので、その点も注意されたい。

手順は4項目に分かれる。

  1. DVDを読み出す。
  2. 字幕トラックをスキャンして読み出す。
  3. 字幕のカラーパレットを読み取り、RGB変換する。
  4. 字幕トラックを動画に焼き込む。

以下、順番に説明する。

  1. DVDを読み出す。

    • UNIXのcatコマンドとniceコマンドを用いる方法

      cat /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_[1234567].VOB | nice ffmpeg -i - ...
      
    • mplayerを用いる方法。
      (mplayerのビルド手順はこちらを参照)

      mplayer -dumpstream dvd://1
      

      できあがると、stream.dumpというファイルが作成される。

  2. 字幕トラックをスキャンして読み出す。
    字幕トラックはビデオトラックと同時に始まる訳ではない。概ねビデオトラックが始まって少し経ってから字幕トラックが始まる。
    ffmpegに、このことを告げる(スキャンさせて見つけ出させる)必要がある。
    一番重要なのは「-probesize 60M」である。単位はマイクロ秒で60百万マイクロ秒、つまり1分間スキャンさせる。
    万が一字幕トラックが一分間以内に始まらなかった場合は、値を増やすことになる。

    ffmpeg -analyzeduration 60M -probesize 60M -i ...
    
  3. 字幕のカラーパレットを読み取り、RGB変換する。
    DVDにはカラーパレットというものがあり、これによって字幕の色が決まる。(字幕の色以外に関係するものがあるのかは不明)
    このカラーパレットを読み出してffmpegに渡す必要がある。(ffmpegは自動的にカラーパレットを読み込むことはできない)
    カラーパレットの読み出しはS.T.氏の尽力によりIFOファイルから直接読み出せるようになった。こちらからダウンロードして欲しい。
    ダウンロードしたら、実行ファイルをパスの通ったところにインストール(Macの場合/usr/local/binなど)する。コピーしたら、次のようにDVD本編のIFOファイルを引数として実行する。(リターンキーを押す)

    iforgb /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_0.IFO
    

    RGBパレットは、101010,101010,7d7d7d,d5d5d5,808080,808080,808080,808080,808080,808080,808080,808080,808080,808080,808080,808080のようになる。

  4. 字幕トラックを動画に焼き込む。
    最後に複雑なビデオフィルタ(-filter_complex)を用いてビデオトラックに字幕トラックをオーバーレイさせて焼き込む。

    • catコマンドでDVDを読み出す場合

      cat /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_[1234567].VOB | nice -i - -filter_complex "[0:v][0:s]overlay[v]"...
      
    • mplayerのストリームダンプの場合

      ffmpeg -i stream.dump -filter_complex "[0:v][0:s]overlay[v]"...
      

    この例では[0:v]」がビデオストリーム「[0:s]が字幕ストリームである。

以上をまとめると、次のようになる。

  • catコマンドでDVDを読み出す場合

    cat /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_[1234567].VOB | nice \
    ffmpeg -analyzeduration 60M -probesize 60M \
    -palette \
    101010,101010,7d7d7d,d5d5d5,\
    808080,808080,808080,808080,\
    808080,808080,808080,808080,\
    808080,808080,808080,808080\
    -i - \
    -filter_complex "[0:v][0:s]overlay[v]" \
    -map [v] -map 0:a \
    -c:v libx264 -preset slow -crf 23 -level 41 -c:a libfdk_aac -b:a 128k \
    DVD_VIDEO.mp4
    
  • mplayerのストリームダンプの場合

    ffmpeg -analyzeduration 60M -probesize 60M \
    -palette \
    101010,101010,7d7d7d,d5d5d5,\
    808080,808080,808080,808080,\
    808080,808080,808080,808080,\
    808080,808080,808080,808080\
    -i stream.dump \
    -filter_complex "[0:v][0:s]overlay[v]" \
    -map [v] -map 0:a \
    -c:v libx264 -preset slow -crf 23 -level 41 -c:a libfdk_aac -b:a 128k \
    DVD_VIDEO.mp4
    

なお、S.T.氏の尽力によりffmpeg version N-67684-g12630fa(2014/11/15 20:50:39 +0900コミット)から、ffmpegに直接IFOファイルをオプションとして与えることでカラーパレットを取り込むことができるようになった。この場合は、以下のようになる。

  • catコマンドでDVDを読み出す場合

    cat /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_[1234567].VOB | nice \
    ffmpeg -analyzeduration 60M -probesize 60M \
    -ifo_palette /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_0.IFO \
    -i - \
    -filter_complex "[0:v][0:s]overlay[v]" \
    -map [v] -map 0:a \
    -c:v libx264 -preset slow -crf 23 -level 41 -c:a libfdk_aac -b:a 128k \
    DVD_VIDEO.mp4
    
  • mplayerのストリームダンプの場合

    ffmpeg -analyzeduration 60M -probesize 60M \
    -ifo_palette /Volumes/DVD_VIDEO/VIDEO_TS/VTS_01_0.IFO \
    -i stream.dump \
    -filter_complex "[0:v][0:s]overlay[v]" \
    -map [v] -map 0:a \
    -c:v libx264 -preset slow -crf 23 -level 41 -c:a libfdk_aac -b:a 128k \
    DVD_VIDEO.mp4
    

以上。

改訂履歴

2014.12.17改訂

  1. DVDの取り込み方法で、catコマンドを用いる方法を復活。catでもmplayerでもどちらでも良いため。

2014.11.17改訂

  1. カラーパレットの読み出しがffmpegに実装されたので追記。(Special Thanks to Mr. S.T.)ただし、実行ファイルの方法も残した。

2014.10.21改訂

  1. カラーパレットの読み出しを表計算からUNIX実行ファイルに変更(Special Thanks to Mr. S.T.)

2014.10.16改訂

  1. DVDの取り込み方法を直接DVDにアクセスする形からmplayerを用いる形に変更
  2. DVD字幕が黒地に黄色になる問題を解決するため、カラーパレットの読み出しとffmpegへの反映方法を追加