« フレッシュリーダー、ちょこっとバージョンアップしたんですけどね・・・ | メイン | [iPhone] TwitCastingの不具合の詳細メモ »

2010年02月18日

iPhone でも Flash でも再生できる mp4 を ffmpeg で作る方法 あとで読む

なんか悔しいからもう一エントリ。まぁ、メモ程度です。

動画にはコーデックとコンテナというのがあり、詳細はともかく、iPhone でも Flash でも再生できる mp4 にしておくと、後々なにかと便利じゃね、ってことでメモ晒しときます。

やってることは H.264/AAC コーデックで MP4 にして、MP4コンテナをごにょごにょいじると iPhone からも Flash からも再生できるmp4が出来上がるというやつです。

で、スーパーフリーウェア ffmpeg を使いましょう。
こいつはバージョンアップが激しいので、yum とかつかわず、ちゃんとソースコンパイルすること。

- ffmpeg

で、この ffmpeg をコンパイルする前に H.264コーデックのエンコーダーをいれておきます。
ありがたいことに VideoLan から フリーの h264/avc encoder が配布されています。

- VideoLAN - x264

一部アセンブラでかかれているので、必要なら yasm をいれておきます。

# yum install yasm

AAC は普通あるので、別途いれる必要はないでしょう。

で、ffmpeg をコンパイル。configure オプションは

# ./configure --enable-libx264 --enable-gpl --enable-shared

とかですかね。これで x264が入ります。

こいつを使って ffmpeg かけると mp4 ができるのですが、ipod で再生できるように vpre をつける必要があります。

小さいサイズの動画ならこんな感じでしょうか

# ffmpeg -i (元動画) -vcodec libx264 -acodec aac -crf 22 -vpre hq -vpre ipod320 -threads 0 -ab 192k

-vpre オプションが複数あってややこしいですが、crf と hq がクオリティ、その後の ipod320 がipod 対応(画面小)です。

上記はワンパスでエンコードしてますが、クオリティ高めるならツーパスでエンコードするといいでしょう。
え、なんちゃらパスの詳しい説明ですか?いやー、まぁ、メモですから。これだけキーワードあれば日本語でもいろいろひっかかりますので調べてみてください。
こちらなんか参考になると思いますよ。

- B地区ex - お勉強:マルチメディア - FLV動画のエンコード

あと英語なら

- robert.swain » FFmpeg x264 encoding guide

です。

さて、これで完成!かと思いきや、できあがった mp4 は逐次再生ができません。

インデックス情報がファイル末尾にあるからで、これを前にもってこないと「全部ダウンロードするまで再生できない」という状態になります。面倒ですねー


で、コンテナ操作には MP4Box とかを使います。
このコマンドは GPAC というライブラリに含まれています。

- GPAC

ここから GPAC (と extra libs) をダウンロード・コンパイルします。

すると MP4Box ができるはず。
なお、コンパイルに失敗する場合、たぶん glut の開発ライブラリが入ってないんだと思います。

# yum install glut-devel

こうして手にいれた MP4Box をつかって、さきほど生成した mp4 を変換します。


# MP4Box -add (さっきのMP4) -new (新しいMP4)


こちらの変換はそれほど時間かかりません。

これで、Flash でも iPhone でも再生できる MP4 が完成です。

まぁ、一つのやり方ということで覚えておいても損はないかと思います。

※ただ、この MP4、iPod Touch 2G + iPhone OS 3.0 の Safari からだけ再生できないので、、それが謎なんですが・・・


ふー、ということで参考になれば!

投稿者 aka : 2010年02月18日 16:47  / 2010年02月 / メモ

トラックバック

人気ブログランキング - a++ My RSS 管理人ブログ

このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/824

コメント

コメントしてください

あわせて読みたい




保存しますか?