その他のx264のオプション
これまでx264cliのオプションの説明は最低限しかしていなかったので、ここでまとめて知っておいた方が良いと思われるコマンドラインオプションを説明しておきます。
2passエンコードの方法
これまで紹介してきた-qオプションは「固定量子化」を意味します。このオプションは1パス専用です。指定した値に従って品質は固定されますが、最終的なサイズは予想できません。平均ビットレートでエンコードしたい場合は-qではなく-Bを指定します。ですが、1回のエンコードでは平均ビットレートが上手く定まらないので2回エンコードすることにより、この問題を解決します。
x264コマンド例
x264.exe --level 4.2 --pass 1 -B 4000 --stats "Movie_2pass.log" -o "Movie.mp4" --threads auto --progress "infile.avs"
x264.exe --level 4.2 --pass 2 -B 4000 --stats "Movie_2pass.log" -o "Movie.mp4" --threads auto --progress "infile.avs"
ポイントは--passオプションを指定することと、-Bオプションで固定のビットレートを指定することです。--passオプションの値の意味は--pass 1がファーストパス、--pass 2がラストパス、--pass 3がNパスになります。3パス以上エンコードしたい場合は、--pass 1 → --pass 3 → --pass 2の順でエンコードする必要があります。--pass 3はログファイルの更新を行いますが、--pass 2はログファイルの更新を行いません。
エンコード回数は2パスで大体狙ったサイズになりますが、もし気に入らない結果になってしまったら3パス、4パスとエンコード回数を増やしてみましょう。
-Bオプションで指定したビットレートの単位はkbpsになります。2回エンコードすることで、最終的に作成されるファイルの平均ビットレートはここで指定したビットレートにかなり近いものになります。また、ビットレートの割り振りもより最適なものになるので、最終的に出来上がるファイルサイズが1パス目とあまり変わらない場合でも画質の向上が期待できます。
--statsオプションはnパスエンコードのログファイルを指定します。このオプションを指定しない場合は"x264_2pass.log"というファイルがデフォルトになります。.logファイルは無ければ自動的に作成されるので、わざわざ自分で用意する必要はありません。
2パスエンコードは動画を狙ったサイズにしたい場合や、より高画質にしたい場合に使用します。
--crfオプション
こちらのオプションは-qオプションに非常に良く似ています。x264のヘルプを見ると、「Quality-based VBR (nominal QP)」とあります。直訳すると品質ベースのVBR(名目上のQP)です。
x264コマンド例
x264.exe --level 4.2 --crf 18 -o "Movie.mp4" --threads auto --progress "infile.avs"
値は-qと同じく、小さい方が品質が良くなります。-bと併用できます。なお、不動小数点も指定できます。
--crfはQP値を変動させます。なので、--qpminや--qpmax、--qpstepといったオプションが有効になります。このオプションを指定すると、ビットレートの変動が-qを指定したときよりもゆるやかになるようです。-qを指定すると、動きが緩やかだとビットレートが極端に低く、動きの激しいシーンだと極端にビットレートが上がったりします。-qは品質を固定しますが、ビットレートの変動が極端過ぎるように感じます。
ある程度ビットレートを安定させたい場合や、動きの少ないシーンでもそれなりにビットレートを割り振りたい場合に--crfを指定すると良いと思います。
Bフレームを指定する
Bフレームとは前後のI、Pフレームを参照する特殊なフレームです。MPEG4では主にIフレーム、Pフレーム、Bフレームという3種類のフレームが存在しています。Bフレームを指定しない場合はI、Pフレームしか使用しません。Iフレームは固定の画像で、Pフレームは直前のフレームを参照するフレームです。
x264コマンド例
x264.exe --level 4.2 --crf 18 -b 3 -o "Movie.mp4" --threads auto --progress "infile.avs"
Bフレームは-bオプションで指定します。ここで指定した数字がBフレームの枚数です。上記の例ではBフレームを3枚と指定しているので、フレームの順序はIBBBPとなります。Bフレームは前後のフレームを参照して生成されるフレームなので、この枚数が多いほど容量が縮むことが期待できます。但し、動きの激しい動画でBフレームを多く指定しても逆効果です。
Bフレームは動画の性質に合わせて効果的な枚数を指定する必要があります。どの程度の枚数を指定すれば良いかは経験を積んで知る他にありません。まあ普通の動画ならば2か3を指定しておけばそんなにおかしなことになることは無いと思います。
--cqmオプション
量子化マトリクスを指定します。MPEG2やXviDでエンコードしている方にはおなじみだと思います。量子化マトリクスとは何ぞや?というと8x8のマトリクスがあるのですが、これに係数を設定します。マトリクスの意味は何なのかというと、左上が低周波成分で右下が高周波成分になります。多分これだけでは具体的なことがあまりよく分からないと思いますが、特に分からなくてもやっていけます。何故かと言うと、おすすめの量子化マトリクスが既に用意されているからです。初めから用意されているのはflatとjvtの2つですが、おすすめなのがjvtです。これを指定するためのコマンドは下記になります。
x264.exe --level 4.2 --q 20 --cqm jvt -o "Movie.mp4" --threads auto --progress "Infile.avs"
--cqmオプションを指定しない場合は量子化マトリクスはflatになります。flatは全周波数成分に対して一定の係数を指定します。flatよりjvtの方が細部がはっきりしたものになるらしく、普通はこちらを指定します。量子化マトリクスについては別途調べて頂くとより詳しいことが分かると思います。
今後も増えるかも・・・
前回 「MP4ファイルの字幕の付け方」
次回 「x264とMP4Boxのヘルプの表示方法」
(更新日:2007/12/9)
MP4ファイルの字幕の付け方
MP4ファイルに字幕を付けるには大まかに2つの方法があります。
- MP4形式がサポートする字幕ファイル(.srt/.sub/.ttxt)を追加する
- 動画そのものに字幕を表示してエンコードする
スマートな方法は前者ですね。しかし、残念なことにこの方法だとPS3に字幕を表示させることはできません。PS3の動画再生時のメニューを見れば分かると思いますが「字幕」に関するメニューはありません。P3で字幕付きの動画を作りたければ、ちょっとかっこ悪いですが、後者の方法で作成する必要があります。今回は一応どちらの方法も紹介しておこうと思います。
前者の方法で作成した字幕付きのMP4ファイルを再生する方法については「MP4ファイルをWindowsで再生する方法」を参照してください。
MP4ファイルに字幕ファイルを追加する方法
コマンドラインとしては以下でOKです。
MP4Box.exe -add "VTS_01_0.idx" "Movie.mp4"
Movie.mp4は既にエンコードやMUXが終了している動画ファイルです。
"VTS_01_0.idx"というファイルがありますが、これは何かと言うと、VOBSubで抽出した字幕ファイルです。VOBSubを使うと.idxと.subというファイルが出力されるので.idxの方を追加してやります。毎回のことですみませんが、VOBSubの使用方法についてはここでは説明しませんので、別途調べてください。
動画に字幕を表示した状態でエンコードする方法
先ほど紹介したVOBSubを使用して、AVIUtlやAviSynthでエンコードしてください。最終的にx264でエンコードする場合はHaffyuv等の可逆圧縮で出力すればOKです。
前回 「PS3でのMP4ファイルの音声(多重音声、5.1ch)について」
次回 「その他のx264のオプション」
(更新日:2007/9/7)
いろいろインストール方法
先に断っておくと、ここではすべてのソフトの詳細な手順は説明しません。インストールに必須な技術的な説明のみ行います。これらの方法が分かれば大体のモジュールはインストールできるようになると思います。後は自力で頑張ってみてください。全然初心者にやさしくないなー。
解凍ソフト(まずインストールしておくアプリ)
ZIP、LZH、RARといっぱい圧縮形式はありますが、とりあえずこれを入れておけば全部解凍できるよ、というものを紹介します。
Lhaplusの説明はするまでもないとは思いますが一応。こいつ一つで、ZIPやらLZHやらの有名どころな圧縮ファイルを大抵解凍できるようになります。
Lhaplusで大抵解凍できるのはいいんですが、7z形式が解凍できません。
そこで、7z形式を解凍できる7-Zipが必要になります。この2つさえあればWindowsで解凍できなくて困るといったことはないでしょう。7-Zipをインストールしても7z形式のファイルは関連付けされません。7zファイルを解凍するには、7zファイルを右クリックし7-Zipのメニューの「解凍」を選択します。
infのインストール方法
Lagarithなんかを落としてくると、インストーラなんて気の利いたものは入ってません。infファイルが入っているので、こいつを右クリックして「インストール」を選択します。
DirectShowフィルタのインストール方法
CoreAVCを落としてくると7z形式のファイルがダウンロードされますが、こいつを解凍しても「CoreAVCDecoder.ax」とReadmeしか入ってません。これをどうしろと?と思うかもしれませんが、やり方はregsvr32.exeを使用します。
- CoreAVCDecoder.axをC:\WINDOWS\system32に移動させる
- スタートメニューを開き、「ファイル名を指定して実行」
- "regsvr32.exe"と入力
- 移動させたCoreAVCDecoder.axを「ファイル名を指定して実行」ウィンドウにD&D
- OK
「〜DllRegisterServerは成功しました。」というメッセージが出れば成功です。
なんでこういうことをする必要があるのかというと、DirectShowフィルタはCOM(Component Object Model)だからです。COMとはなんぞやというと、モジュールの仕様です。これに従って作っておけば、なんかいろいろ便利なんじゃね?といったような感じの代物です。で、このCOMのモジュール(COMコンポーネントと言う)、というかDLLを使うにはレジストリ登録というものをしなければなりません。それがregsvr32.exeです。DirectShowフィルタの拡張子はaxですが、実態はWIN32API(普通のDLL)です。DllRegisterServerという関数がCOMコンポーネントに必ず実装されていて、regsvr32.exeからこの関数が呼び出され、関数内で自己のレジストリ登録処理を行っています。
Windows Vistaの場合
Windows Vistaの場合、上記手順ではCoreAVCDecorder.axのレジストリ登録は失敗します。インストールするにはコマンドプロンプトを「管理者として実行」で開き、CoreAVCDecorder.axを置いてあるフォルダまで移動し、regsvr32.exeを実行します。
(更新日:2007/9/16)
DLLの仕組み
せっかくだからDLLの仕組みを説明しておきます。
まずCOMでないDLLの読み込み時の動作ですが、アプリケーションは静的な読み込みであれ動的な読み込みであれ、DLLの名前を直接指定して使用します。DLLの読み込み優先順位は、アプリケーションの存在するフォルダ→カレントディレクトリ→システムディレクトリ(system32とか)→ウィンドウズディレクトリ(WINDOWSとか)→環境変数のパスになります。DLLをどこに置いたら良いか分からなかったら、とりあえずシステムディレクトリに入れておきましょう。
次にCOMのDLLですが、モジュール自体はどこに置いておいても良いです。重要な点は、regsvr32.exeで登録を行った場所から移動させないことです。アプリケーションはCOMコンポーネントに対し、直接インターフェースを要求するのではなく、COMをサポートするインターフェースを介して必要なインターフェースを取得します。
Windows Vistaが登場して新しいAPIセットも登場したという時代なのに、凄い今更感丸出しな説明ですね・・・。開発者にとっては当たり前の知識かもしれませんが、普通にWindows使ってるだけの方にとっては実際ここまで知るのは厳しいかと思って簡単に説明してみました。興味のある方は是非もっと詳しく調べてみてください。Windowsプログラミングはやりたくねぇと思えますから。
前回 「いろいろインストール方法」
(更新日:2007/9/15)
このブログについて
はじめましてT-SYSTEMと申します。
本日は当ブログ「(略)技術まとめとか」に御アクセス頂き、誠にありがとうございます。
大人の都合で必要になるかもしれないこのブログについての説明を、この場で行いたいと思います。
旧タイトルからの変更について
旧タイトル「TSのてきとうな技術まとめとか」からタイトルを変更しております。
変更の理由としましては、MPEG-2のTS(トランスポートストリーム)について検索された方が誤って、アクセスされることがあるからです。TS形式について調査されている方には申し訳ありませんが、このブログではTS形式の説明は一切行っておりません。
目的
このブログの目的ですが、旧タイトルの通りです。技術っぽいものをてきとうにまとめようというものです。私的な日記について書いていくことは無いと思います。「PS3で動画生活」とありますが、PS3の動画技術に関する専門的なブログを目指しているわけではありません。いきさつとしては、x264について調べていたりすると、意外にも壁にぶち当たることが多いので、私がぶち当たった問題をクリティカルに解決する手段を紹介できればと思って始めました。
今後も技術的問題に遭遇し、これを乗り越えることがあれば紹介していきたいと思います。
コメント等について
割と記憶を頼りに書いてる部分もありますので、間違ったこととかも平気で書いている恐れがあります。間違い箇所等がありましたら気兼ねなくコメントして頂けると幸いです。ご質問などされても構いませんが、私の都合で返事が遅くなることもありますので考慮の上お願い致します。トラックバックについては営利目的以外なら遠慮なくなさって下さい。
ご意見ご要望について
メールにて承ります。アドレスはサイドバーに記載のアドレス宛にお願い致します。@マークの前後の括弧は外して下さい。
記事の修正等について
ブログの内容としては技術的な資料の意味合いが非常に強いので、内容に誤りや気に入らない点があった場合、私の気分次第で予告なく変更、削除されることがあります。
免責
免責事項についてはこちらをまずご一読下さい。要はすべて自己責任でお願い致します。また本ブログのいかなる記事の複製、転載も認められません。
液晶テレビの選び方
PS3に限らずHDの動画を楽しむならハイビジョンのテレビは欠かせません。でも液晶テレビは高いし、一杯種類があって、どれを買えばいいのか結構悩むと思います。今回はハイビジョン液晶テレビの選択のポイントみたいなのを書いていこうと思います。
サイズ選択基準
まず、どの程度のスペックのテレビが欲しいかで選択肢は変わってきます。大まかに下の2つです。
- フルHD(1080p)
- HD(720p)
上記2つで何が違うかと言うと、解像度が違います。当たり前ですけど。1080pとは有効走査線数が1080本のプログレッシブ映像のことです。フルHDの液晶テレビでは1080pの映像を、情報の損失なく表現することができます。フルスペックハイビジョンとかフルハイビジョン等と言ったりもします。720pだと有効走査線数が720本のプログレッシブ映像になります。普通のハイビジョン液晶テレビなら、720pの映像を情報の損失なく表現することが可能です。つまり、普通のHD液晶だと1080pの映像を縮めて表示することになります。
ちなみにHDはHigh Definitionの略で高精細を意味します。どのくらい高精細かと言うと、アナログ放送(NTSC)が480iなので、720pの場合は縦の解像度だけなら1.5倍、画素数にするとなんと3倍になります。これが1080pだと6.75倍と、その差は圧倒的です。
更についでなのですが、現在の地上デジタル放送の解像度は1440x1080固定です。まあ今の地上デジタル放送はビットレートの関係でそんなに綺麗ではないので、フルHDのパネルが必要とは言い難いです。
どちらににすべきか?
当然フルHDです。と、言いたいところなのですが、現在発売されている液晶テレビは最低でも32V型でないと無理です。今のところ32V型でフルHDを実現しているのはシャープだけです。しかし、どうせフルHD買うなら37V型以上を買った方が良いでしょう。
でも37V型は正直高いです。20万ぐらいします。でも、そんなに頑張ってフルHDにしなければならないか?と言うと、特にそんなことはないです。画面サイズがでかくなると、当然1ピクセルの大きさも変わってきてしまうので、画面サイズが大きい場合は解像度を上げてあげないといけない訳です。なので、画面が小さければ、フルHDでなくてもちゃんと見れます。大画面に拘らなければ別にフルHDである必要は無いと言えます。単純だなー。
問題は32V型なんて中途半端なものが欲しいな、と思ってる場合です。予算に余裕があるなら37V型で適当なものが良いでしょう。32V型でもフルHDがいいならシャープ製一択になってしまいます。
倍速駆動
サイズの選択基準は大体上記で良いと思うのですが、それ以外の付加価値的な機能が液晶テレビには沢山あります。あり過ぎて何がなにやら分からない現状ですが、注目すべき機能に絞って簡単に説明していきたいと思います。
最近では当たり前の倍速駆動ですが、これはどういった機能なのかと言うと、フレームレートを倍で表示する技術です。
具体的には通常60Hz(1秒間に60回)で表示されているフレームを、倍の120Hz(1秒間で120回)で表示します。これは単純にフレーム数を倍に増やして表示しているのではなく、最適な中間フレームを生成して表示しています。これにより残像を減らし、目が疲れにくくなるだけでなく、画質も向上すると言われている技術です。
長時間動画を鑑賞するのであれば、とりあえずこの倍速駆動の技術は外せないでしょう。ちなみに倍速駆動を最初に始めたのはビクターです。
1080/24p対応
PS3でBDを鑑賞するならば、はずせない機能でしょう。
PS3はBDの再生でHDMIの1080/24p出力を行うことができます。これは24フレームの映像をそのまま24フレームとして出力する機能です。説明になってないですね・・・。もうちょっときちんと説明すると、この機能が無い場合、30フレーム中に24フレームの映像を無理やり入れ込んで(正確には変換して)再生します。これを2-3プルダウンと言います。こういった変換を行わずにそのままのフレームレートで表示します。
HDMI 1080/24p出力を行うことができても、入力側が対応していないと意味が無いので、1080/24p入力に対応しているかどうかもチェックのポイントになると思います。
xvYCC対応
HDMI1.3の主な仕様として「xvYCC」という新しい色空間に対応しています。ソニーのBRAVIAでは「x.v.Color」と言っています。
xvYCCはHDTVで利用されているsRGB色空間と互換性があります。sRGBの各要素の値は0〜1だったのに対し、xvYCCは負の値や1以上の値を設定することができ、sRGBよりも色域が広くなっているのが特徴です。
PS3はHDMI1.3の出力が可能なので、今後登場するであろうxvYCC出力を行うコンテンツに備え、チェックしてみてはいかがでしょうか?
録画機能
画質とは関係ないのですが、ユーティリティ面にも目を向けるべきです。特に録画機能は是非とも欲しい機能です。たかだか録画するだけなのに別途高価な録画機を買うのは非常に馬鹿らしいです。ムーブなんてしない人にとっては東芝のREGZAはありがたいことでしょう。REGZAの場合だと初めからハードディスクが内臓してあるタイプとUSB外付けハードディスクに対応してあるタイプがあります。外付けハードディスクを余らしている人にとっては外付け対応は非常に魅力的なのではないでしょうか?
なお、録画したハードディスクは別の機器では再生できない制約があります。
えー、こんな感じで参考になったでしょうか。私も早く新しいテレビが欲しいです。たまにテレビの製品ラインナップを見ては涎を垂らしてニヤニヤしながら欲しいなーっと思ったり思わなかったりする日々です。
前回 「PS3が売れない理由」
次回 「いろいろインストール方法」
(更新日:2007/9/30)