x264 r1867 の crf
なんかcrfの基準が変わったらしいよ…?
という話。
r1867の更新では
猫科研究所様の訳
表示時間を考慮した品質管理らしい。で、フレームレート25fpsが基準の中心。x264は25fpsが好きですな。keyintのデフォも25×10の250だし。ヨーロッパ(?)は25fpsなんだっけ。どうでもいいけど。
重要なのはcrfが同じでも、フレームレートによって画質が変わるということなのだが、「じゃあ実際どんくらいよ?」ってのが気になる。あと、そんなことより一番重要なのは、「r1834と同じにするにはどうすりゃいいのよ?」というあたり。この辺を実験してみた。
x264のr1834とr1867で比較。
動画は
800x600
6891frame
30fps
コマンドラインは
--preset medium --ipratio 1.5 --qcomp 0.7 --scenecut 60 --min-keyint 4 --keyint 300 --b-adapt 2 --me umh --no-fast-pskip --no-dct-decimate
これをavisynth + x264でエンコード。x264は例によってx264.nlのもの。
元の動画は30fpsなのだが、
avisynthでAssumeFPS()することで、フレームレート(だけ)をいじる。
・r1834
・r1867 30fps(29.97でもいいけど、今回大した差はないはず)
・r1867 25fps
・r1867 23.976fps
・r1867 15fps
で比較。
crfは0.5刻みで10~30の間をテスト。(この範囲外を使う人はいないっしょ?)
これまで(r1834)なら、フレームレートを変えても、出来上がる動画のサイズ(容量)は同じになる。逆に、r1867からはフレームレートを下げると高画質(低圧縮)になるはず。
で、結果。
これは全体図。
横軸がcrf値、縦軸は動画のサイズ(容量、KB単位)。

--crfは小さいほうが低圧縮(高画質)ですよ~という当たり前の図。
これだと線が重なってよくわからないので拡大。

r1834の線は、r1867 25fpsに隠れてしまっていて、ほぼ同じってことがわかる。
猫科様のところに
『目安として「これまでと同じCRF値で同じフレームあたりの品質が再現される」フレームレートが25fps』
とあるので、当然なのだが。
で、r1867 30fpsは、高圧縮(低画質)寄りになっている。同じcrfだと5%ぐらい縮んでる。むろん縮んだ分画質は悪くなってるはず。
グラフから、同じ圧縮率(画質)=同じ動画サイズにするには、30fpsならばr1834の設定よりもcrfを -0.3 ぐらいしなきゃいかんようだ。
まあ、個人的には「フレームレートによってcrf値と画質の関係が変わるってどうよ?」と思うのだが、どうせ29.97fpsでしかエンコードしない(というか自動フィールドシフト時は29.97fps指定)ので「いままでより-0.3」としておけば問題ない。うん。
もっと言えばcrfの0.3差なんていじる必要もない誤差でしかない。あんま気にしてもしょうがない。こんな実験するまでもなかった…と。
という話。
r1867の更新では
猫科研究所様の訳
表示時間を考慮した品質管理らしい。で、フレームレート25fpsが基準の中心。x264は25fpsが好きですな。keyintのデフォも25×10の250だし。ヨーロッパ(?)は25fpsなんだっけ。どうでもいいけど。
重要なのはcrfが同じでも、フレームレートによって画質が変わるということなのだが、「じゃあ実際どんくらいよ?」ってのが気になる。あと、そんなことより一番重要なのは、「r1834と同じにするにはどうすりゃいいのよ?」というあたり。この辺を実験してみた。
x264のr1834とr1867で比較。
動画は
800x600
6891frame
30fps
コマンドラインは
--preset medium --ipratio 1.5 --qcomp 0.7 --scenecut 60 --min-keyint 4 --keyint 300 --b-adapt 2 --me umh --no-fast-pskip --no-dct-decimate
これをavisynth + x264でエンコード。x264は例によってx264.nlのもの。
元の動画は30fpsなのだが、
avisynthでAssumeFPS()することで、フレームレート(だけ)をいじる。
・r1834
・r1867 30fps(29.97でもいいけど、今回大した差はないはず)
・r1867 25fps
・r1867 23.976fps
・r1867 15fps
で比較。
crfは0.5刻みで10~30の間をテスト。(この範囲外を使う人はいないっしょ?)
これまで(r1834)なら、フレームレートを変えても、出来上がる動画のサイズ(容量)は同じになる。逆に、r1867からはフレームレートを下げると高画質(低圧縮)になるはず。
で、結果。
これは全体図。
横軸がcrf値、縦軸は動画のサイズ(容量、KB単位)。

--crfは小さいほうが低圧縮(高画質)ですよ~という当たり前の図。
これだと線が重なってよくわからないので拡大。

r1834の線は、r1867 25fpsに隠れてしまっていて、ほぼ同じってことがわかる。
猫科様のところに
『目安として「これまでと同じCRF値で同じフレームあたりの品質が再現される」フレームレートが25fps』
とあるので、当然なのだが。
で、r1867 30fpsは、高圧縮(低画質)寄りになっている。同じcrfだと5%ぐらい縮んでる。むろん縮んだ分画質は悪くなってるはず。
グラフから、同じ圧縮率(画質)=同じ動画サイズにするには、30fpsならばr1834の設定よりもcrfを -0.3 ぐらいしなきゃいかんようだ。
まあ、個人的には「フレームレートによってcrf値と画質の関係が変わるってどうよ?」と思うのだが、どうせ29.97fpsでしかエンコードしない(というか自動フィールドシフト時は29.97fps指定)ので「いままでより-0.3」としておけば問題ない。うん。
もっと言えばcrfの0.3差なんていじる必要もない誤差でしかない。あんま気にしてもしょうがない。こんな実験するまでもなかった…と。
スポンサーサイト