layout | nav_order | title | parent |
---|---|---|---|
default |
6 |
RGB Encoding. |
Encoding Overview |
You do not have to encode into YCrCb, there are a number of codecs that support RGB directly.
It does lower the compression efficiency a little, but eliminates any concern that the YCrCb conversion is affecting the imagery.
| Codec Family | ffmpeg codec | Bit depth | pix_fmt | Web Support | |------------|------------|------------|------------| | h264 | libx264rgb | 8 | | no | | HEVC/H265 | libx265 | 8 10 12 | rgb rgb-10 rgb-12 | All browsers | | HEVC/H265 | hevc_videotoolbox | 8 10 | rgb rgb-10 rgb-12 | All browsers | | VP9 | libvpx-vp9 | 8 10 12 | rgb rgb-10 rgb-12 | All Browsers | | Mjpeg | mjpeg | 8 | yuv-4:2:2 yuv-4:4:4 | no | | DNxHD | dnxhd | 8 10 | rgb | no |
h264 does support RGB encoding, which may be preferable in some situations.
Using the encoder:
-c:v libx264rgb
Has no support in web browsers, but there is limited support in players such as RV.
For more details see: Mjpeg. This is an 8-bit only encode.
-c:v mjpeg -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -pix_fmt rgb24 -q:v 2 -vf "scale=in_range=full:out_range=full"
VP9 has some excellent 10 and 12 bit RGB encodes.
Example encoding:
ffmpeg -r 24 -start_number 1 -i inputfile.%04d.png -frames:v 200 -c:v libvpx-vp9 \
-crf 22 -pix_fmt gbrp10le -quality good -row-mt 1 -speed 2 -vf "scale=in_range=full:out_range=full" \
-color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb \
-y outputfile.mp4
| label | Codec Params | | 8_bit_libx264rgb | -c:v libx264rgb -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -crf 18 -pix_fmt rgb24 -preset slow -vf "scale=in_range=full:out_range=full" -x264-params keyint=15:no-deblock=1 | | 8bit_mjpeg | -c:v mjpeg -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -pix_fmt rgb24 -q:v 2 -vf "scale=in_range=full:out_range=full" | | vp9_10bit_rgb | -c:v libvpx-vp9 -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -crf 22 -pix_fmt gbrp10le -quality good -row-mt 1 -speed 2 -vf "scale=in_range=full:out_range=full" | | vp9_12bit_rgb | -c:v libvpx-vp9 -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -crf 22 -pix_fmt gbrp12le -quality good -row-mt 1 -speed 2 -vf "scale=in_range=full:out_range=full" | | vp9_8bit_rgb | -c:v libvpx-vp9 -color_primaries bt709 -color_range pc -color_trc bt709 -colorspace rgb -crf 22 -pix_fmt gbrp -quality good -vf "scale=in_range=full:out_range |
| This is showing different rgb encoding against file size. | | This is showing different rgb encoding against encoding time | | This is showing different rgb encoding against mean VMAF |
For more details see: