Last update : September 17, 2013
I wanted to know the best X264 parameters to encode my personal movies with ffmpeg for my family website. I rendered 375 frames (15 seconds) from the open-source Big-Buck-Bunny image files (360-png) with different settings, starting at frame 1.113. This post refers to my former post about AVC (H264) video settings.
The common parameters for the encoding are :
- -vcodec libx264
- -f image2
- -pix_fmt yuv420p (chroma subsampling : 4:2:0)
- -tune animation
- resolution (pal) : 640 x 360 pixels
- frame rate : 25 fps
1st Test
The ffmpeg settings for the first test series are :
- -preset veryslow
- -profile:v baseline
- -level 3
- -refs 1
The value of the Constant Rate Factor (CRF) was changed from 20 to 32, in steps of 3. Here are the results :
CRF |
Filesize (KB) |
Videostream (Kbps) |
Bits/(Pixel*Frame) |
20 |
2.430 |
1.326 |
0.230 |
23 |
1.472 |
802 |
0.139 |
26 |
877 |
478 |
0.083 |
29 |
531 |
289 |
0.050 |
32 |
338 |
183 |
0.032 |
Visually the quality difference between the movies with an CRF = 20 and CRF = 32 is not perceptible. These are snapshots of the two movies :
CRF = 20 Image size = 39,6 KB |
CRF = 32 Image size = 32,6 KB |
2nd Test
The ffmpeg settings for the second test series are :
- -crf : 20
- -profile:v baseline
- -level 3
- -refs 1
The three presets veryslow, medium and ultrafast have been used. Here are the results :
Preset |
Filesize (KB) |
Videostream (Kbps) |
Bits/(Pixel*Frame) |
veryslow |
2.430 |
1.326 |
0.230 |
medium |
2.729 |
1.489 |
0.258 |
ultrafast |
5.276 |
2.880 |
0.500 |
Presets are designed to reduce the work needed to generate sane, efficient commandlines to trade off compression efficiency against encoding speed. The default preset is medium. If you specify a preset, the changes it makes will be applied before all other parameters are applied.
The X264 settings of the different presets are :
ultrafast
- –no-8x8dct
- –aq-mode 0
- –b-adapt 0
- –bframes 0
- –no-cabac
- –no-deblock
- –no-mbtree
- –me dia
- –no-mixed-refs
- –partitions none
- –rc-lookahead 0
- –ref 1
- –scenecut 0
- –subme 0
- –trellis 0
- –no-weightb
- –weightp 0
veryslow
- –b-adapt 2
- –bframes 8
- –direct auto
- –me umh
- –merange 24
- –partitions all
- –ref 16
- –subme 10
- –trellis 2
- –rc-lookahead 60
3rd Test
The ffmpeg settings for the third test series are :
- -preset veryslow
- -crf : 20
- -profile:v baseline
- -level 3
The numer of reference frames was changed to the values 1, 2, 4, 8 and 16. Here are the results :
Ref frames |
Filesize (KB) |
Videostream (Kbps) |
Bits/(Pixel*Frame) |
1 |
2.430 |
1.326 |
0.230 |
2 |
2.378 |
1.297 |
0.225 |
4 |
2.203 |
1.201 |
0.209 |
8 |
2.079 |
1.134 |
0.197 |
16 |
2.027 |
1.106 |
0.192 |
4th Test
The ffmpeg settings for the fourth test series are :
- -crf : 20
- -profile:v main
- -level 3
The numer of reference frames was changed to the values 4, 8 and 16 for the two presets veryslow and medium (4 is the minimum number of reference frames of the main profile). Here are the results :
Preset |
Ref frames |
Filesize (KB) |
Videostream (Kbps) |
Bits/(Pixel*Frame) |
veryslow |
4 |
1.517 |
826 |
0.143 |
veryslow |
8 |
1.411 |
768 |
0.133 |
veryslow |
16 |
1.389 |
756 |
0.131 |
medium |
4 |
1.700 |
926 |
0.161 |
medium |
8 |
1.636 |
891 |
0.155 |
medium |
16 |
1.607 |
875 |
0.152 |
5th Test
The ffmpeg settings for the fifth test series are :
- -preset veryslow
- -crf : 20
The profiles and levels have been changed. Here are the results :
Profile@Level |
Filesize (KB) |
Videostream (Kbps) |
Bits/(Pixel*Frame) |
baseline@3.0 |
2.430 |
1.326 |
0.230 |
main@3.0 |
1.517 |
826 |
0.143 |
high@3.0 |
1.405 |
765 |
0.133 |
Profiles are not set by default in X264. If a profile is specified, it overrides all other settings, so that a compatible stream will be guaranteed.
The X264 settings of the different profiles are :
baseline
- –no-8x8dct
- –bframes 0
- –no-cabac
- –cqm flat
- –weightp 0
- No interlaced
- No lossless
main
- –no-8x8dct
- –cqm flat
- No lossless
high
A level inside a profile specifies the maximum picture resolution, frame rate and bit rate that a decoder may use.
The complete detailed informations about settings are available in the x264.exe inbuild documentation, accessible with the command x264 –fullhelp .
The following list provides some links to websites with more informations about ffmpeg and x264 video encoding :