2016-10-18 29 views
1

私はx264でffmpegを使った経験があり、私はlibvpx-vp9と比較したいと思っていました。私はraw videoの単純なシングルパスエンコーディングをテストし、x264とlibvpx-vp9の両方でcrf設定とプリセットを変更しました。私はlibvpxに新しく、私はthisthisを慎重に辿ったが、私が得た結果があまり意味を持たないので、私はまだパラメータの間違った組み合わせを指定しているかもしれない。FFmpeg x264を使ったCRFコントロールlibvpx-vp9

私はx264のために

:あなたはPSNRの値を取得し、プリセットを変更することができます

codec , settings      , time  , PSNR  ,bitrate 
libx264,['-crf', '20', '-preset', 'fast'],13.1897280216, 42.938337 ,15728 
libx264,['-crf', '20', '-preset', 'medium'],16.80494689, 42.879753 ,15287 
libx264,['-crf', '20', '-preset', 'slow'],25.1142120361, 42.919206 ,15400 
libx264,['-crf', '30', '-preset', 'fast'],8.79047083855, 37.975141 ,4106 
libx264,['-crf', '30', '-preset', 'medium'],9.936599016, 37.713778 ,3749 
libx264,['-crf', '30', '-preset', 'slow'],13.0959510803, 37.569511 ,3555 

これは私には理にかなって、CRF値を与えられた:

ffmpeg -i test_video.y4m -c:v libx264 -threads 1 -crf <crf> -preset <preset> -y output.mkv 

をし、以下の結果を得ましたビットレートは低下しますが、エンコードする時間は増加します。私は-cpu-usedオプションは、x264の中-presetと等価であることをオンラインチュートリアルから考えて、すべての

ffmpeg -i test_video.y4m -c:v libvpx-vp9 -threads 1 -crf <crf> -cpu-used <effort> -y output.mkv 

まず:私はlibvpx-VP9については

。あれは正しいですか?もしそうなら、-qualityとの違いは何ですか?さらに、範囲が-8から8になるので、高速オプションが正の値のときに負の値が最も遅いと仮定しました。

codec  , settings      , time  , PSNR  ,bitrate 
libvpx-vp9,['-crf', '20', '-cpu-used', '-2'],19.6644911766,32.54317,571 
libvpx-vp9,['-crf', '20', '-cpu-used', '0'],176.670887947,32.69899,564 
libvpx-vp9,['-crf', '20', '-cpu-used', '2'],20.0206270218,32.54317,571 
libvpx-vp9,['-crf', '30', '-cpu-used', '-2'],19.7931578159,32.54317,571 
libvpx-vp9,['-crf', '30', '-cpu-used', '0'],176.587754965,32.69899,564 
libvpx-vp9,['-crf', '30', '-cpu-used', '2'],19.8394429684,32.54317,571 

ビットレートは非常に低く、PSNRはcrf設定(およびx264のに比べて非常に低い)の影響を受けないようだ:私が得る結果はしかし非常に混乱しています。 -cpu-usedの設定は非常に影響が少なく、-2と2は同じオプションです。何が欠けていますか?私はlibvpxがエンコードするのに(確かに真実ですが)同時に高品質のトランスコードをするのに時間がかかることを期待しました。 に使用するパラメータは、x264との公正な比較が必要ですか?

編集: @mulvyaのおかげで、これdoc私は-b:v 0を追加する必要がlibvpxとCRFモードで動作するようにそれを考え出しました。私は私のテストを再実行し、私が取得:

codec  , settings         , time  , PSNR  ,bitrate 
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '-2'],57.6835780144,45.111158,17908 
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '0'] ,401.360313892,45.285367,17431 
libvpx-vp9,['-crf', '20', '-b:v', '0', '-cpu-used', '2'] ,57.4941239357,45.111158,17908 
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '-2'],49.175855875,42.588178,11085 
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '0'] ,347.158324957,42.782194,10935 
libvpx-vp9,['-crf', '30', '-b:v', '0', '-cpu-used', '2'] ,49.1892938614,42.588178,11085 

PSNRとビットレートは、期限を意味するものではあり-speedため-b:v 0

+0

VP9の場合は、CRFにエンコードするときに '-b:v 0'を追加する必要があります。 – Mulvya

+0

ありがとう!私は質問を編集します – igon

答えて

3

負の値を追加することにより、大幅に上昇したが、ゼロに近い速度設定で、それは効果がありません。より高速なエンコードの場合は、ゼロからさらに離れた値(たとえば4または6)を-speedの値に使用します。また、スレッドを使うことも考えられます。

-qualityは推奨されていないため、使用しないでください(コードコメントに従って)。

+0

こんにちは@ロナルド、否定的なスピードが「締め切りを意味する」と言ったときに何を意味するのか少し詳しく説明できますか?私はより多くのテストを行い、crfとスピードのパラメータを変えました。負のスピード設定では、結果がPSNRとビットレートの点では正のスピードになりますが、完了までには時間がかかります。 – igon

+0

これは、各スーパーブロック(64x64ピクセル)をエンコードするのに要する時間を計算するためのタイマーが実行されていることを意味し、デッドラインよりも時間がかかると、エンコードを中止してフレームをドロップします。しかし、デッドラインを設定しなかったので、デフォルト(無制限)が使用されます。つまり、フレームのエンコードを中止することは決してありません。だから、それはいくつかの余分なコードを実行する(遅くする)が、その結果を使用することはありません。デッドラインは、主にリアルタイム通信(RTC)アプリケーションに役立ちます。 –

+0

ありがとうございました! – igon

関連する問題