ffmpeg(libx264) のエンコードログの見方

これらを参考にし、というか猫科研究所の記事を大いに参考にしました。
使用コマンド
ffmpeg -f lavfi -i mandelbrot -s 320x240 -t 20 -vcodec libx264 -b:v 300k -i_qfactor 0.5 -benchmark -tune ssim -ssim 1 out.mp4

使用したバイナリ
ffmpeg-20130408-git-9dc88ac-win64-static
http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20130408-git-9dc88ac-win64-static.7z

エンコードオプション
cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=300 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=2.00 aq=2:1.00

最後に表示される結果をまとめたもの
frame I:2       Avg QP:24.26  size: 12376
frame P:126 Avg QP:27.05 size: 4419
frame B:372 Avg QP:35.24 size: 473
consecutive B-frames: 0.6% 0.4% 0.6% 98.4%
mb I I16..4: 34.0% 37.2% 28.8%
mb P I16..4: 2.5% 0.7% 0.0% P16..4: 36.0% 14.9% 14.6% 0.0% 0.0% skip:31.2%
mb B I16..4: 0.0% 0.0% 0.0% B16..8: 17.6% 0.4% 0.0% direct: 0.4% skip:81.6% L0:38.7% L1:40.6% BI:20.6%
final ratefactor: 25.08
8x8 transform intra:27.4% inter:36.3%
coded y,u,v intra: 15.1% 15.1% 17.2% inter: 3.1% 7.3% 7.5%
i16 v,h,dc,p: 19% 20% 11% 51%
i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 15% 41% 7% 5% 2% 5% 6% 4%
i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 19% 14% 10% 10% 7% 9% 9% 8%
Weighted P-Frames: Y:0.0% UV:0.0%
ref P L0: 55.8% 8.5% 25.1% 10.6%
ref B L0: 87.7% 11.0% 1.3%
ref B L1: 93.6% 6.4%
SSIM Mean Y:0.9756208 (16.130db)
kb/s:303.04
bench: utime=13.260s
bench: maxrss=114788kB


frame I:2       Avg QP:24.26  size: 12376
frame P:126 Avg QP:27.05 size: 4419
frame B:372 Avg QP:35.24 size: 473
各フレームごとの枚数、平均 QP(数値が小さいほど高画質)、1フレームあたりの容量。これらの QP は --ipratio と --pbratio で調整できる。

consecutive B-frames:  0.6%  0.4%  0.6% 98.4%
--b-adapt 1 または 2 のときに、B-frame が何フレーム連続したかの割合。
左から0フレーム、1フレーム、2フレームと続き、設定した --bframe だけ結果が表示される。
設定した値の右端が 1% を下回る場合は最適かもしくは値が大きすぎ、逆に 10% を超える場合はもっと値を大きくしても画質向上が見込めるかもしれない。

0枚はI/Pの後に1枚もBフレームが入らずI/Pフレームが来るケース。
1枚はI/Pの後に1枚だけBフレームが入り、その後I/Pフレームが来るケース。
2枚はI/Pの後に2枚Bフレームが入り、その後I/Pフレームが来るケース。
以下同文。

mb I  I16..4: 34.0% 37.2% 28.8%
mb P I16..4: 2.5% 0.7% 0.0% P16..4: 36.0% 14.9% 14.6% 0.0% 0.0% skip:31.2%
mb B I16..4: 0.0% 0.0% 0.0% B16..8: 17.6% 0.4% 0.0% direct: 0.4% skip:81.6% L0:38.7% L1:40.6% BI:20.6%
各フレームごとのマクロブロック(MB)に関する割合。

I16..4: 34.0% 37.2% 28.8%
左から i16x16, i8x8, i4x4 の割合を示している。

P16..4: 36.0% 14.9% 14.6%  0.0%  0.0%
左から p16x16, (p16x8 + p8x16), p8x8, (p8x4 + p4x8), p4x4 の割合を示している。

B16..8: 17.6%  0.4%  0.0% 
左から b16x16, (b16x8 + b8x16), b8x8 の割合を示している。

mb P skip:31.2%, mb B direct: 0.4%  skip:81.6%
P-frame にはスキップマクロブロック(--fast_pskip)が、B-frame にはダイレクトマクロブロック(--direct)とスキップマクロブロックが使えるのでその割合も表示される。

mb B L0:38.7% L1:40.6% BI:20.6%
B-frame において、L0 は過去のフレームを、L1 は未来のフレームを参照している割合。BI はよくわからない。

final ratefactor: 25.08
動画全体の QP の平均。ABR でエンコードした時に表示される。

8x8 transform intra:27.4% inter:36.3%
8x8変換がどの程度イントラマクロブロックとインターマクロブロックで使われたかの統計。Hightプロファイルで使える --8x8dct を使ったときに表示される。

coded y,u,v intra: 15.1% 15.1% 17.2% inter: 3.1% 7.3% 7.5%
よくわからない。

y, uvDC, uvACそれぞれについて、intra/inter別に、DCT係数が全て0にはならず、符号化された割合。これらは知ったとしても特に扱いようがないかもしれない。例えば、QPを高くすれば量子化により0になるケースが増え、全体にこれらの値が下がる。また、--chroma-qp-offsetで1以上の値を指定すれば、uvDC, uvACの値は減らせる。しかし、果たしてそれに意味があるだろうか…?


i16 v,h,dc,p: 19% 20% 11% 51%
i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 15% 41% 7% 5% 2% 5% 6% 4%
i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 19% 14% 10% 10% 7% 9% 9% 8%
よくわからない。

r1262から追加された、intra予測モードに関する情報。現状、筆者がよく理解していないため説明は保留させてもらうが、内容を知ったところで、恐らく特にアクションの起こせるものでもない。



Weighted P-Frames: Y:0.0% UV:0.0%
全ての P-frame の中で、重み付き P-frame が使用された割合。--weightp smart つまり、--weightp 2 に設定すると 0 以外の値が表示される。設定しても素材に不要と判断されたら使われない。

ref P L0: 55.8%  8.5% 25.1% 10.6%
ref B L0: 87.7% 11.0% 1.3%
ref B L1: 93.6% 6.4%
P-Frame と、B-Frame の何フレーム先を参照しているかの割合。左から1フレーム(つまり隣)、2フレームと続く。L0 は過去のフレームを、L1 は未来のフレームを参照している。

SSIM Mean Y:0.9756208 (16.130db)
元の映像から比較してどれだけ劣化しているかの指標で 1 が元と同じ映像。db はよくわからない。

kb/s:303.04
出力データの平均ビットレート。

bench: utime=13.260s
bench: maxrss=114788kB
utime が CPU がどれだけ使われたか 実行時間(秒)と、maxrss がメモリを最大でどれだけ使われたかの値で、同じ設定でも実行の度に微妙に値が変化する。-benchmark を付けると表示される。

x264 1パス目ののログファイルの説明。

in:%d out:%d type:%c q:%f itex:%d ptex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d

in: frame number in display order.
out: frame number in coded order.
type: 'I'=>I-frame (IDR), 'i'=>I-frame (non-IDR), 'P'=>P-frame, 'B'=>B-frame (referenced), 'b'=>B-frame (disposable).
q: average QP over all macroblocks in the frame. (currently an integer since we don't do per-MB ratecontrol).
itex: bits spent on DCT residuals in intra MBs.
ptex: bits spent on DCT residuals in inter MBs.
mv: bits spent on MVs, refs, and partitions.
misc: bits spend on MB skip flags, slice header, and alignment.
imb/pmb/smb: number of intra/inter/skip MBs.

Disposable means that when b-pyramid is turned on, it's not one of the b-reference frames. When it's off, all b-frames are this. (Like divx/xvid b-frames.)
IDR frames start a new GOP, thus they're the easiest to seek to. The distiction is made because p/b frames can reference frames on the other side of a normal I frame in h.264.



x264 1st Pass Log Format? - Doom9's Forum

関連記事

【x264】 Mediainfo で見た analyse の読み方
関連記事

コメント

非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。