< 秋葉原の思い出(2) | メイン | 動画エンコ続きと諸々 >

2007年01月20日

 ■ W-ZERO3 用の動画を作る

土日きっちり休めるのは久しぶりの週末。 今日は、W-ZERO3 [es] で見られる動画を作るために、朝から試行錯誤してみた。

昔は PC 用に AviUtl で DivX エンコしていたのだけど、 最近は avi コンテナではなく mp4 やら mkv やらを使うのが良いらしい。 携帯用の動画にあまり手間をかける必要性も感じないので、 mp4 コンテナをいきなり吐ける「携帯動画変換君」を使うことにした。 設定さえきちんと決まれば、ドラッグアンドドロップで次々に変換できて、楽なことこの上ない。

今日試してみたのは、ビデオコーデック: XviD、オーディオコーデック: AAC(LC) である。 他のコーデックだともっと他にやりようがあるだろうと思うが、未確認。 また、W-ZERO3 [es] 側のプレーヤは TCPMP を使用する。

まずは 携帯動画変換君 を用意して、母艦 PC にインストール。 W-ZERO3 用設定ファイル をダウンロードして、これをベースに自分なりにカスタマイズする。

気付いたこと:

W-ZERO3 [es] のハードウェア側の制限が色々ある。 フレームレート 29.97fps でそのままファイルを作成してもフルに再生できない。 15fps がちょうど良いが、滑らかにパンするカットでカクカクした動作になってしまう。 これは 29.97fps のままでも起こるので、 あきらめて 15fps にして、フレームあたりのビットレートを上げることにする。

一方、PC で再生するとブロックノイズが目立つファイルでも、 W-ZERO3 [es] の液晶画面ではそこまで確認できないので、 ビットレート低すぎでガタガタのファイルでも結構見られる。

涼宮ハルヒのアニメOPをソースサンプルとして色々試してみた。 フレームレートは先述の通り 15fps。 1-pass だと、結構高ビットレートでないと辛く (1024kbps 以上必須)、 サビの動きが激しい所がぐちゃぐちゃになってしまう。 2-pass エンコードするとかなりの画質向上が見られ、 2-pass 768kbps ならば PC での鑑賞にも堪えられるくらいだ。 2-pass 512kbps でも、 W-ZERO3 の液晶画面では殆どノイズが確認できないので許容範囲だろう。

CBR (-b オプション) なのに、 2-pass にすると画質向上する仕組みが最初は理解できなかったのだが、 実際にはビットレート固定ではなく、全体で -b 数値の指定くらいになるよう調整しながら VBR エンコしているらしい。 携帯動画変換君の GUI 上でも q= の値が動的に変化していることがわかる。

quality base 量子化固定の -qscale オプションを使うと、q=6→2→6→6→2 のように変動する (-qscale 6 の場合)。 実は -b 指定の方が q=7→6→5→2→4 のように細かく変動するので、 同一サイズなら CBR 指定の方が微妙に画質が良い (ような気がする)。 -qscale 6 と -b 512 がほぼ同じサイズになるが、-b 512 の方が良さそうだ。

オーディオストリームの方は、サンプリングレート 48KHz や 44.1KHz が W-ZERO3 側のハードウェア制限でダウンサンプリングされてしまうらしい。 22KHz で 128kbit/s、一応ヘッドフォンで聴くからステレオにする。

-b 512、-ab 64 (ステレオだから実際は 128kbit/s) くらいにしておくと、 計算上 (24分 = 1440s) * (512 + 128) = 921600bits = 約 115MB くらいのファイルになる。 実際作ってみると 120MB くらいになってしまうが、 それでも 1GB の miniSD に30分アニメが8本ぴったり入る。 これくらいがちょうど良いかな。

結局、今日作成した .ini ファイルのコマンドラインは以下の通り。

Title=XviD/640x360/15fps/512kb/AAC/24kHz/128kb/stereo
TitleE=XviD/640x360/15fps/512kb/AAC/24kHz/128kb/stereo
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -t
imestamp "<%TimeStamp%>" -f psp -bitexact -vcodec xvid -cropleft 4 -cropright 4 
-s 640x360 -r 14.985 -b 512 -deinterlace -pass 1 -passlogfile "<%TemporaryFile%>
" "<%TemporaryFile%>.MP4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -t
imestamp "<%TimeStamp%>" -f psp -bitexact -vcodec xvid -cropleft 4 -cropright 4 
-s 640x360 -r 14.985 -b 512 -deinterlace -pass 2 -passlogfile "<%TemporaryFile%>
" -acodec aac -ac 2 -ar 22050 -ab 64 "<%OutputFile%>.MP4""
Command2="rm "<%TemporaryFile%>-0.log""
Command3="rm "<%TemporaryFile%>.MP4""

表示上折り返しているが、もちろん Commmand 行はそれぞれ実際には1行である。 OutputPath にゴミファイルが生成されるが、ファイル名がランダムなのでうまく消せない。

-cropleft と -cropright オプションはソースによって微調整の必要あり。 また、-deinterlace オプションはソースがインタレース画像の時のみ必要。 また、16:9 前提なので、ソースが 4:3 ならそのまま 640x480 にするか、 上下に黒帯があるなら -croptop / -cropbottom オプションで削る。

参考リンク:
http://revivalgate.net/rnote.php?u=pc/mobile/2005-12-28a.html
http://hiromasa.zone.ne.jp/blog/archives/260/
http://www4.pf-x.net/~osusume/Transcoding.ini

投稿者 gema : 2007年01月20日 18:42

トラックバック

このエントリーのトラックバックURL:
https://gema.luna2.org/cgi-bin/mt/mt-tb.cgi/72

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)