[FFmpeg-user] Extracting frames from HDR video to PNG format - question about PQ nonlinearity [txt]

MichaƂ Kudelski m.a.kudelski at gmail.com
Thu Jan 23 16:14:29 EET 2020

[sorry for my previous post - had some problems with my mail client
and text formatting...]

I have an input video file in HDR format (BT.2020 colors, PQ transfer
function according to SMPTE ST 2084; more details attached below). I
am extracting frames to 16-bit PNG files using the following command:

ffmpeg -i <input> -pix_fmt rgb48be -s:v 1920x1080 -color_primaries 9
-color_trc 16 -colorspace 9 -color_range 1 ../frame_%06d.png

The info about an example output PNG file is also attached below.

My question is: what is the "nonlinearity" of the data in my output PNG file?
What I need to do is to linearize the RGB data from the PNG file (for
further processing). Should I assume that:
a) I need to execute the "de-gamma" transform as for typical sRGB data
(as in https://en.wikipedia.org/wiki/SRGB)
b) I need to execute the "de-2084" transform (using appropriate PQ
(perceptual quantizer) equations)
c) other?

In other words, how ffmpeg works in this case:
a) does it transform the ST 2084 PQ-based nonlinearity (input video)
into sRGB gamma-based nonlinearity (output PNG)?
b) does it simply put ST 2084 PQ-based nonlinear data into the output
PNG file (without changing the nonlinearity)?
c) other?

Any information is welcome. Any reference to the documentation or the
source code is very welcome :-)

HDR video file info (acquired with 'mediainfo' command, filtered):
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10 at L5.1@High
HDR format : SMPTE ST 2086, HDR10 compatible
Bit rate : 52.7 Mb/s
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0 (Type 2)
Bit depth : 10 bits
Color range : Limited
Color primaries : BT.2020
Transfer characteristics : PQ
Matrix coefficients : BT.2020 non-constant

Output PNG file info (acquired with 'identify -verbose' command)
Image: HP_003240.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 1920x1080+0+0
  Units: Undefined
  Colorspace: sRGB
  Type: TrueColor
  Base type: Undefined
  Endianess: Undefined
  Depth: 16-bit
  Channel depth:
    Red: 16-bit
    Green: 16-bit
    Blue: 16-bit
  Channel statistics:
    Pixels: 2073600
      min: 0  (0)
      max: 37661 (0.57467)
      mean: 8491.55 (0.129573)
      standard deviation: 7453.65 (0.113735)
      kurtosis: -1.04893
      skewness: 0.435634
      entropy: 0.776201
      min: 0  (0)
      max: 38149 (0.582116)
      mean: 8885.71 (0.135587)
      standard deviation: 7841.78 (0.119658)
      kurtosis: -1.12391
      skewness: 0.418303
      entropy: 0.77953
      min: 0  (0)
      max: 38345 (0.585107)
      mean: 9488.9 (0.144791)
      standard deviation: 8624.84 (0.131607)
      kurtosis: -1.06718
      skewness: 0.498124
      entropy: 0.78175
  Image statistics:
      min: 0  (0)
      max: 38345 (0.585107)
      mean: 8955.39 (0.13665)
      standard deviation: 7973.43 (0.121667)
      kurtosis: -1.02099
      skewness: 0.475895
      entropy: 0.77916
  Rendering intent: Perceptual
  Gamma: 0.454545
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Matte color: grey74
  Background color: white
  Border color: srgb(223,223,223)
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 1920x1080+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
    date:create: 2019-10-28T11:22:07+01:00
    date:modify: 2019-10-25T20:20:32+02:00
    png:IHDR.bit-depth-orig: 16
    png:IHDR.bit_depth: 16
    png:IHDR.color-type-orig: 2
    png:IHDR.color_type: 2 (Truecolor)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 1920, 1080
    png:pHYs: x_res=0, y_res=1, units=0
    png:sRGB: intent=0 (Perceptual Intent)
    signature: c6850dd1d1e52091ea76c987a99a527c8151b8c00108d7373586bbae3317a63f
    verbose: true
  Tainted: False
  Filesize: 8.2234MiB
  Number pixels: 2073600
  Pixels per second: 4.06588MP
  User time: 0.210u
  Elapsed time: 0:01.509
  Version: ImageMagick 7.0.8-12 Q16 x86_64 2018-09-25 https://imagemagick.org

More information about the ffmpeg-user mailing list