/dev/beandog  

Encoding presets for x264

x264 is well documented, and I like using it, but sometimes I want to see all the flags that a preset is using, compared to the defaults. So, I put this little table together to work as a reference. I used mediainfo to read the x264 encoding options from the video. Since x264 doesn't write *all* of the encoding settings (that I can see, partitions is an example), this may not be 100% accurate.

You can duplicate my results if you like. The source video was nyan cat jazz, which I downloaded using youtube-dl, converted to YUV4MPEG2 using ffmpeg, then used x264 encoder to encode the raw video into a raw h.264 container.

$ youtube-dl -o nyan-cat-jazz.mkv "http://www.youtube.com/watch?v=AaEmCFiNqP0"

# convert one second of video from MP4 to raw video (YUV4MPEG2)
# OR download video.y4m directly
$ ffmpeg -i nyan-cat-jazz.mkv -t 1 video.y4m

# encode using ultrafast preset, using one CPU thread to raw h.264
$ x264 --preset ultrafast --threads 1 -o x264_preset_ultrafast.mkv video.y4m

$ mediainfo x264_preset_ultrafast.mkv

Also see output of x264 --fullhelp

Comments and corrections are welcome.

Legend

The default preset is medium, which is what the other presets are compared against.

* - are differing values from medium.

[ ] values are either set by default, or by another argument.

+ - the x264 argument is used

- - the x264 argument is not used.

Option ultrafast superfast veryfast faster fast medium slow slower veryslow placebo
aq-mode 0* 1 1 1 1 1 1 1 1 1
aq-strength [0]* [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0]
b-adapt 0* 1 1 1 1 1 1 2* 2* 2*
bframes 0* 3 3 3 3 3 3 3 8* 16*
chroma-qp-offset [0]* [0]* [0]* [0]* [-2] [-2] [-2] [-2] [-2] [-2]
deblock [0:0]* [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0] [1:0]
direct spatial spatial spatial spatial spatial spatial auto* auto* auto* auto*
me dia* dia* hex hex hex hex hex umh* umh* tesa*
merange 16 16 16 16 16 16 16 16 24* 24*
no-8x8dct +* - - - - - - - - -
no-cabac +* - - - - - - - - -
no-deblock +* - - - - - - - - -
no-fast-pskip - - - - - - - - - +*
no-mbtree +* +* - - - - - - - -
no-mixed-refs +* +* +* +* - - - - - -
no-weightb +* - - - - - - - - -
partitions none* i8x8,i4x4* p8x8,b8x8,i8x8,i4x4 p8x8,b8x8,i8x8,i4x4 p8x8,b8x8,i8x8,i4x4 p8x8,b8x8,i8x8,i4x4 p8x8,b8x8,i8x8,i4x4 all* all* all*
rc-lookahead 0* 0* 10* 20* 30* 40 50* 60* 60* 60*
ref 1* 1* 1* 2* 2* 3 5* 8* 16* 16*
scenecut 0* 40 40 40 40 40 40 40 40 40
slow-firstpass - - - - - - - - - +*
subme 0* 1* 2* 4* 6* 7 8* 9* 10* 11*
trellis 0* 0* 0* 1 1 1 2* 2* 2* 2*
weightp 0* 1* 1* 1* 1* 2 2 2 2 2

Film Tuning

Changes when using --tune film.
Option default --tune film
deblock 1:0 -1:-1*
psy-rd 1.00:0.00 <unset>:0.15*

Animation Tuning

Changes when using --tune animation.
Option default --tune animation
bframes 2 +{2}*
psy-rd 1.00:0.00 0.4:<unset>*
aq-strength 1.0 0.6*
ref 3 {Double if >1 else 1}*

Blu-ray Compatability

Changes when using --bluray-compat.
Option default bluray-compat
b-pyramid 2 1*
min-keyint 25 1*
weightp 2 1*

Defaults

These are some of the encoding settings that remain the same in all presets.
Option default
b-bias 0
b-pyramid 2
crf 23.0
ipratio 1.40
keyint 250
min-keyint 25
pbratio 1.30
psy-rd 1.00:0.00
qcomp 0.60
qpmax 69
qpmin 0
qpstep 4

x264 links

Video metadata

These are the encoding settings as reported by mediainfo for each preset, using the same source material from above.

Here's one way to export the info on command line:

mediainfo video.mkv | grep Encoding | cut -d ':' -f 2- | tr '/' '\n' | cut -d ' ' -f 2-

ultrafast

cabac=0 / ref=1 / deblock=0:0:0 / analyse=0:0 / me=dia / subme=0 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=0 / intra_refresh=0 / rc=crf / mbtree=0 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=0
superfast
cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x3 / me=dia / subme=1 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=1 / 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=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc=crf / mbtree=0 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00
veryfast
cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=2 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=1 / 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=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=10 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
faster
cabac=1 / ref=2 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=4 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=1 / 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=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=20 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
fast
cabac=1 / ref=2 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=6 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / 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=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=30 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
medium
cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / 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=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
slow
cabac=1 / ref=5 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=8 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / 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=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
slower
cabac=1 / ref=8 / deblock=1:0:0 / analyse=0x3:0x133 / me=umh / subme=9 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / 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=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
veryslow
cabac=1 / ref=16 / deblock=1:0:0 / analyse=0x3:0x133 / me=umh / subme=10 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=8 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
placebo
cabac=1 / ref=16 / deblock=1:0:0 / analyse=0x3:0x133 / me=tesa / subme=11 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=16 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00

Notes

  • x264 version is x264 0.164.3094 (2022-04-26 checkout).

$Id: x264_preset_reference.html,v 1.19 2022/04/26 14:57:04 steve Exp steve $