5

Colour range (Limited, Expanded) is something I've only thought of recently, and I'm worried I may have introduced colour banding into some of my videos.

When doing a standard MP4 export from ffmpeg, melt, Handbrake, Openshot, SimpleScreenRecorder, whatever, what will the colour range likely be? I would assume the Full range of 0-255, but seeing as all DVDs and Blu-Rays are Limited, I'm not so sure.

It would also be good to know what range YouTube uses. I'm finding it very difficult to find out much more than "TV = Limited, PC = Full".


Video sources I tend to work with:

  • Component capture (PS2)
  • HDMI capture (Xbox 360, laptop)
  • DVDs
  • MiniDV AVIs
  • YouTube videos
  • Screen recordings
  • Android phone
  • Webcam
  • Sometimes various cameras/camcorders from various price ranges

All Standard Definition content is PAL - I hear NTSC is weaker in terms of colour reproduction but haven't seen any difference myself from eyeballing.

  • From what I understand, it's the codec you're writing to that matters, not the source. I don't know how ffmpeg etc work, but Davinci Resolve, which I am familiar with, automatically decides whether to use full data range code value levels or video range based on the codec you're delivering to. Patrick Inhofer gives a good explanation if you sign up for a free 7 day trial of mixing light. Video here: mixinglight.com/color-tutorial/… – Jason Conrad Aug 18 '17 at 1:41
  • @JasonConrad I've never even heard the terms Data Levels and Video Levels before. I guess they're pretty much the same thing. And I'm not giving my billing info just to watch a video - I'll accept a direct link if you have one (as it gives the impression it's just an unlisted YouTube video). – spacer GIF Aug 18 '17 at 3:51
5

Most videos are limited range i.e. luma goes from 16 to 235, and chroma from 16 to 240.

Unless expressly set, FFmpeg does not scale the range from one to another. Whatever the source is, that's the output.*

However, many inputs don't tag this property in their metadata. So, the output doesn't get tagged either. In that scenario, players tend to assume conventional values. So, a 720p video will get treated as a limited-range BT.709 picture, irrespective of the actual encoding. And some players, especially web ones, don't seem to parse this metadata, and aren't provisioned to adapt to non-default values. So, they will always the treat the input as having conventional encoding.

For safety's sake, HD videos should be encoded to BT.709 Limited range and SD to BT.601 Limited range.

*unless the source only accepts a pixel format whose range is different.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.