Colorspace Dataset

Allows you to see the impact of the color space on compression.

Note

Pourquoi mendevi plot colorspace.db -x rate -y psnr -c eotf -m '(prim, range)' -wx "ref_stem=='park_joy'" -f "not name.startswith('ref')" -t t_met_metric Les petites crois sont au dessus? Pourquoi smtpe2084 consome moins d’energie pour av1?

The parameters of this database

Name

Value

Description (link)

Total

video

park_joy

ctc

\(1\)

profile

fhd

video resolution

\(1\)

primaries

bt601, bt709, bt2020

vid_gamut (in profile)

\(3\)

transfer

linear, bt1361, gamma22, gamma28, smpte2084

vid_eotf (in profile)

\(5\)

range

tv, pc

vid_range (in profile)

\(2\)

encoder

libsvtav1, libx264

enc_encoder

\(2\)

quality

\(\left\{\frac{k}{17} \mid k \in [1,16] \right\}\)

enc_quality

\(16\)

effort

medium

enc_effort

\(1\)

mode

vbr

enc_mode

\(1\)

thread

\(\left\{ 8 \right\}\)

enc_threads

\(1\)

repeat

\(2\) times

total repetitions

\(2\)

ramdisk

no

shm in enc_cmd

\(1\)

host

paradoxe-32

env_hostname

\(1\)

metrics

psnr, ssim

Table t_met_metric

total

\(\prod\)

total number of points

\(1920\)

Download

mendevi download colorspace.db.xz.torrent

Pipeline

This is the pipeline used for measurements:

Pipeline diagram
  1. The input video park_joy.mkv was losslessly transcoded with different colorspaces to form the set of reference videos reference_park_joy_*_fhd.mp4, including the default reference_park_joy_fhd.mp4.

  2. Each of the reference_park_joy_* videos was lossly encoded by varying several parameters but without changing the colorspace. These videos form the sample* collection.

Plots

Distortion as a function of bitrate for several colorspaces

  • On the left column, the sample videos are directly compared (without color conversion) to their lossless reference reference_park_joy_*_fhd.mp4.

  • On the right column, the sample videos are transformed back using the inverse color transformation and then, compared to the same default reference reference_park_joy_fhd.mp4.

mendevi plot colorspace.db -x rate -y ssim_comp -c eotf -m '(prim, range)' -wx "ref_stem=='park_joy'" -wy codec -f "not name.startswith('ref')" -t t_met_metric
Distortion as a function of bitrate

Impact of EOTF on energy consumption

Regardless of the encoder used, the energy does not depend on the primary colors or the range. On the other hand, libsvtav1 curiously consumes about 20% less when using the smpte2084 transfer function!

mendevi plot colorspace.db -x rate -y energy -c eotf -m '(prim, range)' -wx encoder -s 'sharey="row"' 'sharey=False'
Energy as a function of bitrate

In the graph below, all videos are compared to the same reference video reference_park_joy_fhd.mp4, i.e., in the same absolute color space.

mendevi plot colorspace.db -x ssim_comp -y energy -c eotf -m '(prim, range)' -wx encoder -f "ref_stem=='park_joy'" -s 'sharey="row"' 'sharey=False' -t t_met_metric
Energy as a function of bitrate

Lossless color transformation

The reference videos park_joy_* are transformed back using the inverse color transformation and then, compared to the same reference park_joy. In view of the PSNR, the conversion can be considered lossless.

mendevi plot colorspace.db -x rate -y psnr -c eotf -m '(prim, range)' -f "'reference' in name"
Lossless back colorspace transformation

Visualize transfer functions

import cutcutcodec
import matplotlib.pyplot as plt
import torch
from mendevi.cst.plot import COLORS, FIGSIZE

# get curves
l2v_names: dict = {}
for name, (l2v, _) in cutcutcodec.core.colorspace.cst.TRC.items():
    l2v_names[l2v] = l2v_names.get(l2v, [])
    l2v_names[l2v].append(name)

# matplotlib plot chart
fig = plt.figure(layout="constrained", figsize=FIGSIZE)
axe = fig.subplots()
axe.grid()
fig.supylabel("v")
fig.supxlabel("l")

# plot data
l = torch.linspace(0, 1, 1000)
for i, (l2v, names) in enumerate(l2v_names.items()):
    axe.plot(l, cutcutcodec.Lambdify(l2v)(l), label=min(names), color=COLORS[i])

axe.legend()
plt.savefig("transfer.svg", format="svg")
plt.show()
The luminosity EOTF transfer functions

Reproduce

for prim in bt601 bt709 bt2020; do
    for trans in linear bt1361 gamma22 gamma28 smpte2084; do
        mendevi prepare park_joy.mkv -p fhd --primaries $prim --transfer $trans --range tv
        mendevi prepare park_joy.mkv -p fhd --primaries $prim --transfer $trans --range pc
    done
done
mendevi encode -c libx264 -c libsvtav1 reference*
mendevi probe --ref reference_park_joy_fhd.mp4 reference* sample*