x264はH.264/AVC video streamをエンコードするためのフリーライブラリです。エンコードをする前にMEncoderのセットアップが必要です。
*セットアップ方法:
MPlayer's man pageのx264 sectionを読む事から始めて下さい。このセクションは補助です。ここでは多くの人が興味を持つと思われるオプションのヒントを書いていきます。man pageのほうが簡潔なのですが、徹底的でもあります。また、技術的な詳細が書かれている事もあります。
このガイドではオプションを2種類のカテゴリに分類しています。:
最終的には、あなたの目的にとって最善のオプションを決められるのはあなただけです。 最初のカテゴリでの選択は簡単。速度差に見合った画質が得られるかを判断するだけです。 第二のカテゴリでは、選択は非常に主観的なもので、考慮すべきポイントも増えます。
注意して欲しい事は、"個人的な好みや特別な目的に有益かもしれないオプション"の中にも速度や品質に大きな影響があるものも含まれていますが、必ずしも有益とは限らないという点です。"個人的な好み" オプションの中には、使った方が良く見えるという人と、悪くなるという人の両方が居るようなものすらあります。
先へ進む前に、このガイドではグローバルPSNRという品質の測定基準だけを使う事をお断りしておきます。PSNRの簡単な説明は、Wikipediaを見て下さい。Global PSNR はx264encoptsのpsnrオプションを使った時に出てくるPSNR値の最後のものです。このガイド内でPSNRに言及する場合、同一ビットレートでエンコードした場合のPSNRと考えて下さい。
*WikipediaのPSNR(英語):http://en.wikipedia.org/wiki/PSNR
このガイドのほぼ全ては、2パスを想定して書かれています。オプションを比較する際に2パスを使う理由は大きく行って2つあります。第一に、多くの場合、2パスではPSNRが約1db向上します。この差は大きいです。第二に、1パスエンコードでの画質比較は、混乱を招き易い。:エンコードの度にビットレートが大きく変化する事があるからです。その結果、画質の変化がオプションを弄ったせいなのか、ビットレートが変わったせいなのか判断しにくいという事になってしまいます。
subq=6は最低速で最高品質のモードです。subq=5と比較してグローバルPSNRは0.1-0.4 dB向上し、速度は25%-100%低下します。subq=6は他の数値とは違って、frameref と meの設定値にあまり影響を受けません。その代わり、subq=6の効果は主としてB-frameの数に拠ります。一般的な使用方法では、これはsubq=6は複雑な、動きの多いシーンでは速度と品質に与える影響が大きいが、動きの少ないシーンでは大して効果的でない事を意味します。注意:B-frameは常に0以外の値に設定する事を推奨します(下記参照)。
Note:
CABACがオフの時にframerefを不必要に高い値に設定すると、符号化効率が落ちる可能性があり、通常、実際に落ちます。CABAC がオン(default)の場合、framerefを「高くしすぎる」心配はしなくても良いようです。将来的には、最適化によってこうした可能性は取り除かれるでしょう。
速度を気にするなら、合理的な妥協案は1stパスでは低いsubq と framerefを使い、2ndでそれらを上げる事です。一般的にはこれで最終的な品質に出る悪影響は無視できるほどのものです。:だいたいPSNR低下は0.1db以下に収まります。目で見てわかるレベルではありません。しかしながら、frameref値の変更は、時にフレームタイプの決定に影響を与えます。ごく稀な事ではありますが、慎重にいくなら素材映像に、I-frameを強制するようなフルスクリーンのフラッシュパターンの繰り返し(*fullscreen repetitive flashing patterns.ポケモンのパカパカ?*)や非常に大きな時間軸の閉塞(*very large temporary occlusion*)がないか確認して下さい。 そして、1stパスのframerefをフラッシュのサイクルや閉塞の持続時間以上になるように調整します。例えば、3フレームに渡って2つの画像の間を行き来するようなシーンがあったら、1stパスのframerefを3以上にします。こうしたケースはライブアクション映像では極めて稀でしょうが、ビデオゲームのキャプチャでは時折ある事です。
me=esa は徹底的なサーチで、これは実際に使うには遅すぎます。
adaptive B-frame decision がオフの場合(nob_adapt)、 一般的な最適値はbframes=1以下です。他の場合動きの多いシーンで画質劣化が起きます。adaptive B-frame decision がオンの場合は(default)、もっと大きな値を使っても安全です。圧縮を妨害しそうなシーンでエンコーダが B-frame の使用を控えます。エンコーダが3や4以上の B-frameを使う事は滅多にありませんから、それ以上の値を指定しても効果は薄いです。
このオプションを使うと、エンコーダはまずまず合理的な速度で、B-frameの効果の薄いシーンのB-frame数を減らす計算をします。b_biasを使って、間引く程度を調節できます。adaptive B-frameの速度低下は目下のところは慎ましいものです。しかし望み得る画質向上の程度も同様です。まぁ、通常は害はありません。1stパスの速度とフレームタイプの決定にしか影響しない事に注意して下さい。b_adapt と b_bias は後続のパスにはなんの影響もありません。
残念な事に、現在のadaptive B-frame decisionアルゴリズムにはフェード中のB-frameの使用を控える傾向が非常に強いです。これが変わるまでは、フェードの影響が大きそうな素材では、nob_adaptをx264encoptsに入れておくのが良いアイデアかもしれません。
レートコントロールにおける複数パスのアドバンテージはシングルパスよりも遥かに高いです。
1stパスで記録した統計を使って、どんなquantizer設定でも、エンコーダは充分正確に各フレームに必要な"コスト"(ビット)を予測する事が出来ます。これにより、ずっと合理的にビットを動きの多いシーンと少ないシーンに配分することができます。この配分方針を調節するには、下記のqcompを見て下さい。
さらに、2パスに1パスの2倍の時間をかける必要はありません。1stパスのオプションを調節して、速度を上げ、画質を落とす事ができます。うまく調節できれば、1stは非常に速く済むでしょう。この場合、サイズ予測の精度が落ちますから、2ndの品質は僅かに落ちます。しかし、通常、違いは目で見て解るレベルにはなりません。 例えば、1stと2ndにそれぞれこんなのを追加して試してみてください。
subq=1:frameref=1 subq=6:frameref=15:4x4mv:me=3
他にも3(以上の)パスが有効なケースがいくつかありますが、上級者向けなのでここでは省きます。
H.264規格にはシンプルなデブロック手段があります。これはI-blockに適用されるQPに基づいて、あらかじめ決められた強さと閾値に基づいてフィルタをかけるものです。デフォルトではQPの高いブロックには強いフィルタがかけられ、QPの低いブロックはデブロックされません。規格で決められているプリセットの強度は慎重に決められたもので、どんな素材をエンコードしても非常に良いPSNRがでる公算が非常に高いものです。deblockalphaとdeblockbetaは、このプリセットのデブロック閾値を調節する為の物です。
多くの人はデブロックフィルタの強さを大幅に弱めるのが良いと考えているようです(例えば-3とか)。
しかしながら、これは決して、と言っても良い程、良い考えとは言えません。そしてほとんどの場合、こうした調節をしている人はデフォルトのデブロックの理屈を理解していないようです。
まず、in-loop デブロックフィルタを知る上で最も大切な事は、デフォルトの閾値はほとんど常に、最適なPSNRをもたらすという事です。
PSNRが最適にならないケースは稀です。従って望ましいオフセットはプラスマイナス1。それ以上はほぼ確実にPSNRの低下になります。フィルタを強くすると、ディテイルの汚れ*1が増え、弱めると目に見えるブロックノイズが増えます。
空間軸の複雑さが少ない素材(例えばディテイルやノイズが少ない)でデブロック閾値を下げるのは、マズいと断言します。こうした素材で発生するアーティファクト*2の封じ込めにかけては、in-loop フィルタは素晴らしい仕事をします。他方、空間軸の複雑さが多い素材でも、アーティファクトは目につきません。なぜなら、リンギングがディテイルやノイズのように見える傾向があるからです。
人間の視覚認識はディテイルの損失には敏感ですが、間違ってノイズが描きだされても簡単には認識できません。*3これは、人間にとっての主観的な品質ということでは、ノイズとディテイルは、ある程度互換性があると言う事です。deblockingフィルタを弱める事は、リンギング・アーティファクトを増やす事になります。ですが、人間の目はこれをディテイルと誤認識します。
しかし、これもデブロックフィルタの強度を弱める理由にはなりません。一般的に、ポストプロセッシングでもっと良い品質のノイズを得られるからです。もし、あなたのH.264エンコードがブラーや、スメア(*smeared:擦って不鮮明にする*)が多すぎたら、再生時に-vf noiseを試してみて下さい。マイルドなアーティファクトなら -vf noise=8a:4a でほぼ封じ込めることができます。これでデブロッキングフィルタをあれこれするより、ほぼ確実に、良く見えるでしょう。
以下は、ビットレートが同じ場合の速度と画質のトレードオフに関わる設定の例です。
素材映像は720x448 @30000/1001 fps , ターゲットビットレートは900kbps、マシンはAMD-64 3400+(2400 Mhz)の64 bitモードです。それぞれの設定で計測したエンコード速度(frames per seconds)と"very high quality"に対するPSNR の低下分 (dB)も書いてあります。素材、マシン、それから開発の進捗で結果は全然変わる事もあるので、その点はご承知ください。
Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB) |
Very high quality | subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b | 6fps | 0dB |
High quality | subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b | 13fps | -0.89dB |
Fast | subq=4:bframes=2:b_pyramid:weight_b | 17fps | -1.48dB |
Documents
読み方
イントロ
インストール
使い方
CD/DVD使い方
FAQ
コンテナ
コデック
Videoデバイス
Audioデバイス
TV入力
Radio入力
Ports
MEncoder基礎
エンコガイド
Doc/bugreports?
FrontPage
■MPlayer
├Manuals
├Documents
└カテゴリ
■GENERAL
├MEMO
├LINK
├雑談所
├最近の更新
└popular
■Other Tools
├ffmpeg
├mkvmerge
├mp4box
├MPEG Streamclip
├QTCoffee
└x264cli
■About
└About Wiki
本日 | 1 |
昨日 | 0 |
累積 | 22540 |