Transfer Characteristics
37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0The transfer characteristic says how code values relate to light. Video is stored with a non-linear curve so that the available code values are spent where the eye notices differences; the transfer tag tells the player which curve was used. ffprobe reports it as color_transfer.
A camera applies an OETF (scene light → signal), a display applies an EOTF (signal → display light), and the end-to-end relationship between the two is the OOTF. “Gamma” is a loose name for these curves and doesn’t identify one precisely.
Code points
Section titled “Code points”| Code | FFmpeg name | Characteristic | Where you see it |
|---|---|---|---|
| 1 | bt709 | BT.709 | HD SDR video |
| 2 | unknown | Not specified | Untagged files |
| 4 | bt470m | Assumed display gamma 2.2 | Obsolete NTSC; see the sRGB note below |
| 5 | bt470bg | Assumed display gamma 2.8 | Obsolete PAL |
| 6 | smpte170m | BT.601 | SD video |
| 7 | smpte240m | SMPTE 240M | Obsolete |
| 8 | linear | Linear light | Intermediate processing |
| 9 / 10 | log100 / log316 | Logarithmic, 100:1 and 316:1 | Rare |
| 11 | iec61966-2-4 | xvYCC | Rare |
| 12 | bt1361e | BT.1361 extended gamut | Rare |
| 13 | iec61966-2-1 | sRGB / sYCC | Images, screen content |
| 14 / 15 | bt2020-10 / bt2020-12 | BT.2020 SDR | UHD SDR |
| 16 | smpte2084 | SMPTE ST 2084 PQ | HDR10, HDR10+, most Dolby Vision |
| 17 | smpte428 | SMPTE ST 428-1 | Digital cinema masters |
| 18 | arib-std-b67 | ARIB STD-B67 HLG | Broadcast HDR, phone cameras |
Codes 1, 6, 14 and 15 describe the same curve. Use the one that matches the system (BT.709 for HD, BT.601 for SD, BT.2020 for UHD SDR); mpv and other libplacebo-based players display all four with the same BT.1886 curve. SVT-AV1 spells some of these differently (bt601, srgb, hlg), and aomenc uses bt2020-10bit and lin.
SDR: BT.709 and BT.1886
Section titled “SDR: BT.709 and BT.1886”Transfer code 1 is the BT.709 camera curve. BT.709 never defined how a display should show it; BT.1886 later specified the reference display EOTF, roughly a 2.4 power curve. So SDR video is tagged bt709, and players display it with a BT.1886-style curve — mpv also assumes BT.1886 for limited-range video with no transfer tag. There is no separate H.273 code for BT.1886; don’t look for one.
sRGB versus gamma 2.2. sRGB (13) has a short linear segment near black, while many displays and a lot of RGB content actually use a pure 2.2 power curve. The difference shows up as shadows rendered slightly too bright or too dark. If content was made for a pure 2.2 display, tagging it bt470m (code 4, “assumed display gamma 2.2”) makes players that honor the tag use exactly that curve.
HDR: PQ and HLG
Section titled “HDR: PQ and HLG”PQ (smpte2084) is absolute: each code value means a specific luminance, up to 10,000 cd/m². Content doesn’t use that whole range — it is mastered to a monitor peak such as 1000 or 4000 cd/m², recorded in the HDR10 static metadata — and the display tone-maps whatever it cannot reproduce.
HLG (arib-std-b67) is relative: the signal describes scene light, and the display scales it to its own peak. It needs no metadata, and an SDR display showing HLG as if it were BT.2020 SDR gives a usable picture.
Both need at least 10-bit samples. 8-bit PQ bands visibly.
Tagging versus converting
Section titled “Tagging versus converting”Changing the transfer tag changes how a player interprets the samples, not the samples themselves. PQ video tagged bt709 looks gray and flat; SDR video tagged smpte2084 looks dark and crushed. Converting between SDR, PQ and HLG is tone mapping — see tone-mapping HDR to SDR. Processing that depends on light levels, such as scaling with a linear-light option or blending, also needs to know the correct transfer, so fix the tag before filtering.