«前の日記(2007年12月01日) 最新 次の日記(2007年12月08日)» 編集

混沌の庭研究所

1998|06|07|08|09|10|11|12|
1999|03|04|05|06|07|08|09|10|11|12|
2000|01|02|03|04|05|06|07|08|09|10|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|06|07|08|09|10|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|05|06|07|08|10|11|12|
2011|01|03|09|
2012|02|03|
2013|05|12|
2019|10|

2007年12月06日 木曜日 [長年日記]

_ [ソフトウェア][Mac] mencoderでX264ムービー

iPod touchを買ったので、以前から作っていたアニメムービーを入れてみた。OpenShiivaで作った640*480のXviD+aac.mp4は問題なく動いた。しかし、実に綺麗だぜiPod touchのムービー表示は! 720*480(853*480表示)のムービーは規格外なので、試しにMPEG Streamclipで480*272にリサイズしてみたのだが、線ががたがたになってしまった。ダメだこれは……。

OpenShiivaはインターレース解除がまるでダメってこともあったので、何か良いものはないかと調べてみるとmencoderがインターレース解除・逆テレシネ変換に強いらしい。リサイズも綺麗にできるとのこと。主にHow to Use ffmpegXメモの記事を参考にして、30fpsでインターレース縞目立ちまくりのDVDソースからx264+aac.mp4を作ってみた。mencoderの逆テレシネ変換はすげぇ! ここまで綺麗になるとは予想以上でした。リサイズもがたつき出なかったし、これはいい。しかし、mencoderの吐くmp4はiPod touchには入らなかったので、どうしたもんかとちと考えてみた。そこで、フルサイズでエンコする1パス目でリサイズしたムービーを吐いて、このムービーをMPEG Streamclipで再エンコしてみた。ヨシ、ばっちりだ! ……しかし、うちのG4 1.2GHzだと24分のムービーのフルサイズ2パスエンコ+iPod touch用エンコで24時間以上かかりやがったので、実用的とはいいがたいデス。

以下、mencoderでのムービーエンコのメモ。

まずは各種ソフトウェアの準備。mencoderはffmpegXのDownloadページからバイナリを頂いてくる。それから、mencoderでは直接mp4を出力できないので、rawvideo出力をmp4コンテナに格納するためのMP4BoxをEvalVid - A Video Quality Evaluation Tool-setから頂いてくる。さらに、mencoderでエンコードする際にBフレームを使うと1フレーム目に空白フレームが挿入されてしまうので、こいつを削除するためにQTCoffeeというツールセットも必要です。

上に挙げたものは全てコマンドラインから使用するソフトウェアなので、気軽に使う場合にはパスの通った場所に置いておく方が良いです。一般的には/usr/local/binを作ってパスを通してここに置いておくのが良いかも。Mac OS X 10.4だとシェルはbashなので、.bash_profileにパスを書いておきます。.bash_profileの作成はNekocan@macとかを参考に。ディレクトリの作成は、Terminalでsudo mkdir /usr/local/bin デス。作ったディレクトリにソフトウェアを放り込むのは、Finderの移動メニュー→フォルダへ移動で/usr/local/binに移動して放り込むのが簡単でしょう。

次にmencoderのエンコード設定。以下は720*480のソースを逆テレシネ変換で24fps化して480*272と720*480のx264.rawvideoを出力する場合の設定です。QuickTimeで再生できるように、High profileのオプションは未使用です。1パス目はiPod touch用ムービーのソース用にリサイズしたものを出力。input_fileを適宜ソースのmpeg2ファイル名に書き換えて、ターミナルでソースのmpeg2ファイルのあるディレクトリに移動して下のコマンドを入力です。下のコマンドは、実際には1行のところを見やすいように適当に改行を入れてあるので、ターミナルに突っ込む時にはテキストエディタにコピペして改行を外してからターミナルにペースト。このコマンドで、input_file.264.logというファイル名のログファイルとinput_fule_1.264というファイル名の480*272のrawvideoが出力されます。各オプションの詳細はmencoderの和訳マニュアルで確認してクダサイ。

mencoder input_file -nosound -ovc x264
-x264encopts threads=2:me=3:bitrate=1200:qp_min=10:qp_max=51:i4x4:4x4mv
:frameref=5:mixed_refs:subq=6:brdo:trellis=2:keyint=240:keyint_min=1
:scenecut=30:cabac:deblock:deblock=0,0:nob_adapt:bframes=1:psnr:turbo=1:pass=1
-passlogfile input_file.264.log
-vf pullup,softskip,crop=720:480:0:0,scale=480:272:::3,hqdn3d=4:3:6,pp=l5,harddup
-sws 10 -ofps 24000/1001 -of rawvideo -o input_file_1.264

次に2パス目の設定。このコマンドでinput_fule_2.264というファイル名の720*480のrawvideoが出力されます。

mencoder input_file -nosound -ovc x264
-x264encopts threads=2:me=3:bitrate=1200:qp_min=10:qp_max=51:i4x4:4x4mv
:frameref=5:mixed_refs:subq=6:brdo:trellis=2:keyint=240:keyint_min=1
:scenecut=30:cabac:deblock:deblock=0,0:nob_adapt:bframes=1:psnr:pass=2
-passlogfile input_file.264.log
-vf pullup,softskip,crop=720:480:0:0,scale=720:480:::3,hqdn3d=4:3:6,pp=l5,harddup
-sws 10 -ofps 24000/1001 -of rawvideo -o input_file_2.264

次に出力されたrawvideoをmp4に格納。まず480*272のファイル。input_file_1.mp4が出力されます。

MP4box -fps 23.976025 -add input_file_1.264 -new input_file_1.mp4

そして720*480のファイル。input_file_2.mp4が出力されます。

MP4box -fps 23.976025 -add input_file_2.264 -new input_file_2.mp4

このmp4は1フレーム目が空白フレームになっていて、そのままでは具合がよろしくないのでこいつを切り放します。前述のように、以下のコマンドは作成したムービーが24fpsの場合。まず480*272のファイル。参照ファイル形式のinput_file_1.movが出力されます。この処理をかけないと、MPEG Streamclipで再エンコできません。

muxmovie -startAt 00:00:00.06 "input_file_1.mp4" -o "input_file_1.mov"

そして720*480のファイル。参照ファイル形式のinput_file_2.movが出力されます。

muxmovie -startAt 00:00:00.06 "input_file_2.mp4" -o "input_file_2.mov"

ここまでの処理でビデオトラック用のファイルは完成です。後は、ソースのmpeg2ファイルからMPEG Streamclipで音声をaiff形式で取り出し、QuickTimeで開いて編集→すべてを選択→コピー。同様にmovファイルをQuickTimeで開いて編集→すべてを選択し、先ほどクリップボードにコピーしたaiffを編集→選択範囲に調整して追加してビデオトラックと音声トラックを合わせます。これを、ファイル→書き出すでムービーからMPEG-4で書き出し。この時オプションでビデオはそのまま、オーディオはAAC-LCを選んで書き出せばx264+aac.mp4ファイルが完成です。なお、最後のステップにはQuickTime Proが必要です。まあ、QuickTime ProがなくてもffmpegやMP4Boxを使えばいいみたいですので、QuickTime Proがない場合は適当に検索してみてクダサイ。

さて、以上のコマンドは1つずつ前のコマンドの処理が終わるごとに入力していってもよいのですが、全てのコマンドをセミコロン(;)で区切って一気に入力すれば、前のコマンドが終了すると自動的に次のコマンドが開始されるので待ち時間がなくなります。2ファイル、3ファイルと連続して実行するのもオッケーです。ちなみに我が家のPPC G4 1.2GHzでは、以上のコマンドの実行が終了するまで13時間弱かかりましたヨ。OpenShiivaだと2パスでも3時間くらいのはずなのに、x264の処理の重さはシャレにならんな……。でまあ、iPod touch用のファイルを作るためには、ここからさらにMPEG Streamclipでinput_file.movを再エンコードしないといけないのです。……ものすごくMac Proが欲しくなってきた!

ところで、ffmpegXのサイトから頂いてきたmencoder(ffmpegXbinaries20060307)なんですが、これまで2本エンコードしてどちらも5分24秒で1〜2フレームの間盛大にブロックノイズが出ます。しかたないので、QuickTimeでブロックノイズの出ているフレームを削除してから音声と合成しているのだけど、一体何なんだコレ。24fpsで計算してみると、7777フレーム目とかになるのか? ナゾだ。

ここ何日か試した結果をとりあえず一通り書いてみたんだが、なんかいろいろ中途半端な内容だな……。