ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

OBSとかNLEのプリセット…各項目の意味(2)
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

OBSとかNLEのプリセット…各項目の意味(2)

2017-01-08 18:37
    手引きとはいえ私自身とても経験が浅く、間違った情報等があるかもしれません。ここに書いてあることは全て鵜呑みにするのではなく、様々な情報から判断、また自らで検証してみましょう。
     ここは違うんじゃないか?という点がありましたらコメントにてご指摘いただければ幸いです。

    [各項目の意味]

    profile    (baseline,main,high)
    x264では再生環境の互換性を規定するための規格があり、どの規格を用いるかを指定します。highでは全てのオプションが使えますが、main、baselineでは使えるオプションに制限がかかります(例:mainだと8x8dctは使えずcqmはflatとなる)。PSPやiPhoneはmainでないと再生できないし、多くのフィーチャーフォンや古いiPodなどはbaselineでないと再生できないようです。ニコ生やるならもちろんHigh。

    direct     (none,spatial,temporal,auto)
    Bフレームの予測方法を指定します。Autoで最適。他にする利点は特にないでしょう。

    cqm      (flat,jvt)
    映像処理の際、元の映像データをどの程度切り捨てるかを決めます。x264の場合、ニコニコの場合flatのままでいいと思います。

    partitions   (8x8dct,i8x8,p8x8,b8x8,i4x4,p4x4,All,none)
    動き補償をどれだけ細かく行うか指定します。p4x4を使用するにはp8x8も必要。i8x8を使用するには8x8dctが必要(8x8dct=1を別途追加)。細かいものを許可するほど画質は向上します。p4x4はエンコード負荷が大きくなるのでp4x4以外にするのが負荷対効果が高いですかね。


    aq-mode   (0,1,2)
    aqとはAdaptive Quantization(AQ)のこと。もともとは高周波(髪の毛や草の輪郭等)にビットを多く、低周波(平面)に少なく分配するようになっています。
    しかし低周波部分は比較的少ないビットで画質向上が期待できるので、高周波部分から低周波部分にビットを再配分して、総合的に画質を上げられます。
    2を指定した時、後述のaq-strengthは0.4/0.28を掛けた値が加算され0~1に丸められた値となります。
    0:AQ無効  1:AQ有効  2:ビット再配分をさらに大きく

    aq-strength  (0.0~3.0)
    aq-modeの強度を指定します。0でaq-mode無効と同様。数値を高めるほど再配分強度があがります。aq-modeが0の場合はこの数値を指定しても意味がないです(たぶん)。
    アニメのように質感が均一に近く面の部分が少ない場合、低めにすると輪郭部分の劣化が抑えられます(0.8~0.9)。
    FPS等細かいオブジェクトが多い場合、強度を上げるとブロックノイズ低減に効果が期待できますが、上げ過ぎると高周波部分の劣化が顕著になり逆効果となります。
    指定しない場合1になりますが、後述のqcompの値が0を指定しても1.0くらいになります。-2くらいにすればちょうど0くらいになるようです。
    0.9~1.3くらいで調整するのがいいでしょう。

    aq-metric   (0,1,2,3)
    フレーム内に低周波・高周波部分が散在する場合、品質を落とさずファイルサイズを小さくすることができます。暗い・青い領域に明るい点がある場合にブロックノイズが目立たなくなります。
    フレームレート等数値として見ると使用しない方が高画質という結果になることもありますが、実際の見た目はその限りではないので見て確認した方がいいでしょう。
    数値が高いほど1ブロック中を区分けして探索するときの区分け具合が細かくなります。ただしその分エンコードも1で12倍、2で30倍、3で120倍くらい遅くなってしまいます。

    b-adapt    (0,1,2)
    Bフレームの連続配置方式を決めます。視覚的に顕著には変わりません。数値が大きい程Bフレームの使用を許可するので容量が小さく済みます。ただし遅延と負荷がかかります。
    bframesの指定した値によってその中でやりくりするので、bframesの値と一緒に設定しましょう。
    0:無効  1:高速アルゴリズム。Bフレーム16の時。  2:最適アルゴリズム。一般的。

    b-bias     (-100~100)
    Bフレームの入りやすさを決めます。数値が大きいほどBフレームが多くなります。Bフレームが多い程小容量、高遅延高負荷。ここでいう負荷とは自身のPCへの負荷です。低ビットレート帯にはそのほうが向いてるみたいです。

    bframes    (0~16)
    Bフレームの最大連続数を決めます。常に指定した数続くわけではありません。大きいほど圧縮率が向上するのでニコニコ等の低ビットレートでは効果的です。
    ですが、大きい程高遅延かつ高負荷にもなってしまいます。

    b-pyramid   (none,strict,normal)
    Bフレームを参考できるようにします。本来はI/Pフレームを参考にしてしかP/Bフレームはつくれないのですが、Bフレームは時間的に近いので予測誤差を減らすことができます。
    none:無効  strict:Blu-Ray用  normal:基本コレ。bframesが2以上ないと意味がないです。

    cabac      (0,1)
    映像を圧縮するときの圧縮形式の指定。cabacかcavlcですが、cabacをオン(1)にするか、オフ(0)にするかで指定する0でcabacは無効化されて、cavlcを使用します。
    cabacの方がcavlcよりも圧縮が強力で、ニコニコのような低ビットレート帯ではそこまでではないですが10%ほどビットレートの節約ができると言われています。
    画質は向上しますが、視聴側の負荷が高くなります。他に比べて負荷にかかる割合が大きいのでこれさえきればかなり負荷は低減されるみたいです。
    cabac有効化にはprofileがmain以上である必要があります。

    crf   (0.0~51.0)
    認知できないレベルの複雑な動きや激しいシーンののQPを上げます。大きい程量子化をするため低画質高圧縮となります。ただし小さくしても画質が向上するというわけではありません。
    デフォルトの画質をベースとしてそこから向上するのではなく、目立たない部分のビットレートを削って目立つ部分に「使えるようにする」という認識が正しいと思います。実際にビットレートの指定をするのは別のオプションであることに注意です。

    colormatrix  (smpte170m,bt709)
    もともとの映像はRGB(Red,Green,Blueの三原色)だけの表現ではなく、輝度や色差分など複数の要素にによって出力されています。これをYUVと言うのですが、通常PCモニタ等はRGBでしか表示できないためこのYUV→RGB変換が必要となります。この変換の方法を指定するのがこのオプションです。変換において、縦解像度が720未満の場合はsmpte170m(他にもありますが)を使用し、縦解像度が720以上の場合はbt709という方法(というのは語弊がある…正確にはマトリクスです)を使用することが国際規格で決められています。再生している側が各自解像度から判別して指定するものなのですが、そんなことをいちいちやっている人もいないものなので、映像にこの情報を埋め込むことで再生する側にマトリクスを指定させます。正直よくわからなければいらないと思います。

    chroma-qp-offset (-12~12)
    彩度と輝度に異なる量子化値を使えるようになります。±3以上にすると明暗どちらかが荒れてきます。下げるほど明るい部分の画質は向上し、暗い部分は低下します。ならば上げれば逆なのかというと、上げると暗い部分は画質向上するというよりは滑らかになりますが、ブロックノイズが発生することがあります。結構プラシーボ感があるのでデフォルトでいい気がします。

    deblock (-6~6/-6~6)
    ブロックノイズを減らします。左の数字はその強度を指定し大きい程多くのブロックノイズに対して滑らかにする(ぼかす)フィルタがかかります。
    右側の数字は閾値の指定。大きい数字ほど、小さなブロックノイズにもフィルタをかけます。強度は閾値にも左右されます。
    ぼやかしてごまかしている感じなので大きくしすぎると輪郭などの高周波部分はもやっとした感じになる。くっきり配信をしたい方は強くし過ぎない方がいいですね。

    fade-compensate
    暗い場所のノイズを低減させます。どういう仕組みでやってるのかわかりません…。あんまり効いてる気もしないです…。…?
    私がプレイしてるゲームには暗い場所が多いのでとりあえず入れてます。

    ipratio     (±0.2くらいでいじるといいかも)
    Pフレームを基準とするIフレームの品質をどれだけ上げるか指定します。大きい程Iフレームの品質は向上し、文字がくっきり見えたりします(deblockなど他のオプションの兼ね合いで結局つぶれることが多い)。大きくしすぎるとPフレームのQPが高まりすぎて総合的に画質が劣化してしまいます。動きの強い映像ならBフレームを多用させるために小さめにするといいかもしれません。下げ過ぎるとIフレームの質が劣化し総合的に画質も低下します。あんまりいじりすぎるとおかしくなりそうですね。

    keyint
    IDRフレームというIフレームの一種が入る間隔を指定します。P/Bフレームは時間的に直近のIフレームだけでなく、2つ先のIフレームなども参照できます。しかし、IフレームのかわりにIDRフレームがあった場合そこは飛び越えることができません。このIDRフレームが何に使われているかというと、この場所がシークバーでシークできる地点となっているのです。大きくし過ぎるとニコ生のタイムシフトが視聴できなくなることがあるらしいです。fps値の10倍くらいにするといいみたいですよ。

    min-keyint
    IDRフレームが入る最小間隔を指定します。keyintの1/10(fps値と一緒)が一般的らしい。

    level      (1~5.2,-1で自動 ffmpegなら10倍の値を指定)
    レベルにより解像度、fps、refが解放されていきます。高すぎると視聴側に影響が出る場合があるので、配信サイトや視聴層に合ったレベルにするのが望ましいです。ニコ生の場合は3.1超にしても対応していないため意味がないので、必然的に最高は3.1ですね。NLEを使っている場合勝手に5.1に指定されるので、自分でオプションに追加した方が良いです。

    mixed-refs  (0,1)
    8x8サブブロックが個々に参照するフレームを選べるようになり、圧縮効率があがり画質も向上します。ただしrefが2以上である必要があります。

    me    (dia,hex,umh,esa,tesa ffmpegではepzs,hex,umh,full)
    動き予測アルゴリズム(=方法という認識でいいと思う)を指定します。dia(epzs)側が精度が低いが処理速度が速く、tesa側が精度高く処理速度は遅いです。精度が高いと画質と圧縮効率が向上します。ニコニコではesa以上はあまり効果がありませんが、umhまでなら画質の向上が期待できます。

    merange  (me=dia,hex:4~16,me≧umh:4~64)
    動き予測範囲と呼ばれる、meの予測する最大範囲を指定するオプション。上げると負荷が増えます。動きの激しい映像の場合は上げると効果があります。

    nr       (0~100000)
    ノイズを減らします。実用範囲は100-200らしいです。もともとx264規格にはないオプションらしいのですが、映像圧縮の前に適用するのでデコーダの機能とは関係なく使えるということみたいです。
    psy-rdと競合し、どちらかしか使えません。両方使用しようとすると両方無効となります。

    dct-decimate (0,1)
    映像を圧縮するときに細やかな部分が省略されますが、オフにすることで元々の映像そのままに近いカタチとなります。もちろんそのぶん必要なビットレートも増えますが…。

    psy       (0,1)
    psy-rdの有効無効を指定します。nrと競合し、どちらかしか使えません。両方使用しようとすると両方無効になります。

    psy-rd     (0.0~:0.0~ 0.0:0.0でオフ)
    subme6,psy=1(もしくはno-psy=0)で使用できるようになります。
    左側の数字は複雑(に見える)部分や、激しく変化する(ように見える)部分のQP値を下げます(最適化)。細部が潰れにくくなりますがビットレートをかなり消費するようになります。低くして他にビットレートを回した方が総合的に見れば画質の向上が見込めるかもしれません。
    右側の数字は低周波部分から高周波部分にビットを再配分して細やかな部分をくっきりさせます。が、やはりビットレートの消費も大きいです。

    qcomp     (0.00~1.00)
    動きの激しいシーンとそうでもないシーンで割り当てるビットレートを調整することで効率化させます。0に設定するとビットレートが一定に、1に設定すると画質が一定となります。実際は1にはしないので、動きがほぼない止まっているシーンなどにはビットレートを割り振らないということになりますね(動きがないのでそれでも画質は落ちない)。ただしビットそのものを減らしてしまうため文字などの細かすぎる部分は潰れたりしてしまうこともあります。簡単に言えば大きい程動きに強く、小さいほど細かいところの画質が上がるということです。後述のmb-treeの効き目を調節する役割も持っています。

    qomax     (0~51)
    量子化値の上限。値が大きいほど高圧縮・低画質となります。x264は自動でqpを調節しているため、デフォルトでいいと思います。

    qpmin      (0~qpmaxの値まで)
    量子化値の下限。値が小さいほど低圧縮・高画質となり、0では可逆圧縮になります。多くの場合、QPが16を下回ると劣化を認知できなくなると言われているらしいです。
    それほど綺麗じゃなくて良いから容量を抑えたいという場合は、16あたりから徐々に増やして調整していくと良いみたいです。

    qpstep     (1~51)
    フレーム間でのQP最大変化量を決めます。大きい程短期間での画質変動が許可されます。ビットレートが低いニコニコではあんまり変わらないですね。

    ref       (1~16)
    参照できるフレーム距離を決めます。高い程高画質になりますが、高くし過ぎるとメモリを食い、見ている側の負荷も高まり見れないこともあるみたいです。

    ratetol (0.1~100)
    ビットレートの変動具合を決めます。低い程変動を抑え、画質の変動を許可します。ビットレート制限が低いニコニコでは特に変わらないです。

    rc_lookahead  (0~keyintの値)
    先読みするフレーム数を決めます。大きいほど先読みできる範囲も大きくなり、画質向上と映像の急激な変化に強くなりますが遅延のもとでもあります。

    subme      (0~10)
    サブピクセルの描写をどれだけ細かく行うか決めます。高い程画質は向上しますが遅延のもとでもあります。
    7、9にする場合bframesが1以上である必要があり、10を使う場合はaq-modeが1か2かつtrellisを2にする必要があります。

    scenecut     (0~100)
    Iフレームをどれだけ挿入するか決めます。0でkeyintの値に固定されます。変に増やしたりすると、Iシーンが必要でないところでもIシーンを入れるようになるのでデータ量が多くなり、結果的に画質の低下を招きます。小さすぎる値だと必要な場所にIフレームが入らずP/Bフレームがうまく参照できなくなり、結局画質の低下を招きます。動画投稿とかする人はシーク位置を固定したいときにIDRフレームを入れ込むことで任意の位置にシークできるようになる…かも?理論的にはできるよね。

    threads     (0~CPUスレッド数)
    x264のスレッド数の指定をします。0で自動で検索してくれる(推奨)。
    エンコード以外の作業を並行して行いたい場合、これを指定して使用するCPUスレッドを下げても良いかもです。CPU使用率が低いからと大きくしても、効果はないかむしろ悪くなるだけみたいです。

    trellis     (0,1,2)
    cabacが有効になっていないと意味がないです。映像処理後、欠けた細部のデータを回復させます。ビットの節約にもなります。数字が大きい程画質優先速度低下となります。submeが10のときはこれを2にする必要があります。

    vbv-init
    読み込みが完了する前に配信開始できるようにします。通常は当然読み込み終わって配信開始ですが、例えば0.5の場合半分読み込みが終わった時点で配信を開始します。いわゆる見切り発車ですね。

    weightb      (0,1)
    Bフレームが参照する、前後のフレームからの距離に応じた補正をかけ、フェードインやフェードアウトの圧縮効率が良くなります。

    weightp     (0,1,2)
    Pフレームが参照する、前のフレームからの距離に応じた補正をかけ、フェードインやフェードアウトの圧縮効率が良くなります。




    と、わーっとリストアップしてみましたが、よく使われているもの、効果がありそうなものを挙げただけなので、他にも良いオプションがあるかもしれません。コメントにて教えて頂けたら助かります。

    ちょっと書き疲れちゃったので今日はこのへんで・・・
    ではでは!
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。