試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

x264とそのライブラリを用いたFFmpeg,MEncoderの可逆(ロスレス)エンコードに関する覚え書き(前半)

x264コマンドとその機能を提供するlibx264ライブラリで指定できるパラメータ指定の内

  • crf=0
  • qp=0(FFmpegからの利用ではcqp=0)

の2つが可逆(lossless/ロスレス・以下ロスレス)エンコードを行うためのものであることが分かったのだが、オプションが2種類あるので結果が違うのではないかと思い、実際に同じ元動画からそれぞれのオプションでエンコードを試して結果を比較してみた。
ここではライブラリ(libx264)ではなく、本家のx264コマンドを用いてみた。

エンコードのコマンド行

(「crf=0」指定)
$ x264 --fps [フレームレート] --crf 0 [入力ファイル] -o crf0.h264

(「qp=0」指定)
$ x264 --fps [フレームレート] --qp 0 [入力ファイル] -o qp0.h264

下はヘルプの該当オプションの説明。

$ x264 --fullhelp | egrep "(crf|qp) <"
  -q, --qp <integer>          Force constant QP (0-51, 0=lossless)
      --crf <float>           Quality-based VBR (0-51, 0=lossless) [23.0]

結果

それぞれのオプションでエンコードした2つのファイルは

(「crf=0」指定したファイル)
$ stat -c "%s" crf0.h264
5684518
(「qp=0」指定したファイル)
$ stat -c "%s" qp0.h264
5684518

サイズが一致し

$ md5sum crf0.h264 qp0.h264
3c12fec2b1db624553a317bcbee1de16  crf0.h264
3c12fec2b1db624553a317bcbee1de16  qp0.h264

ダイジェスト(ハッシュ)も一致した。つまり、どちらのオプションを用いても値が0であればロスレス指定として同じように機能するということが分かった。

0以外の値を指定するときには効果が異なる

とは言え、--crf--qpそれぞれのオプションの効果自体は別で

  • --crfは映像の品質を選択してその値で固定するもの
  • --qpは「Pフレームに用いられるクォンタイザ(quantizer)値」として調整するもの

という違いがあり、0以外の値を指定する場合に効果が異なる。
下はMEncoderから用いる場合の説明となる。
[引用] MPlayer/MEncoderのmanページより

CODEC SPECIFIC ENCODING OPTIONS (MENCODER ONLY)
...
   x264enc (-x264encopts)
   ...
       qp=<0-51>
              This selects the quantizer to use for P-frames.  I- and B-frames
              are  offset  from this value by ip_factor and pb_factor, respec‐
              tively.  20-40 is a useful range.  Lower values result in better
              fidelity,  but higher bitrates.  0 is lossless.  Note that quan‐
              tization in H.264 works  differently  from  MPEG-1/2/4:  H.264's
              quantization parameter (QP) is on a logarithmic scale.  The map‐
              ping is approximately H264QP = 12 + 6*log2(MPEGQP).   For  exam‐
              ple, MPEG at QP=2 is equivalent to H.264 at QP=18.

       crf=<1.0-50.0>
              Enables  constant  quality  mode,  and selects the quality.  The
              scale is similar to QP.  Like the bitrate-based modes, this  al‐
              lows  each frame to use a different QP based on the frame's com‐
              plexity.

(「x264とそのライブラリを用いたFFmpeg,MEncoderの可逆(ロスレス)エンコードに関する覚え書き(後半)」に続く)

関連記事:

使用したバージョン: