Skip to content

Latest commit

 

History

History
86 lines (63 loc) · 3.56 KB

RGBEncoding.md

File metadata and controls

86 lines (63 loc) · 3.56 KB
layout nav_order title parent
default
6
RGB Encoding.
Encoding Overview

RGB Encoding

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 RGB Encoding

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.

mjpeg RGB Encoding

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 RGB Encoding

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

RGB Comparisons

| 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: