25.07.2022, 18:20
Hey all,
Over the past few months, I've had the chance to work with a significant variety of SD video. One of my biggest issues every time is getting the colors to "look right". When you capture analog video (even the Digital8 format), there is no metadata that specifies the color matrix, primaries, and transfer. As you already know, these differ not only between PAL and NTSC, but also within each format. So if you get one of the properties wrong, colors may look identical, very similar, or completely different, depending on what you got wrong.
What happens when you play a video like this in, say, VLC Player? Since there are no hints present about the color properties, the player will try to guess them based on the remaining properties of the video. That is framerate, video size, interlacing, etc. But if you process the video, say de-interlace with bobbing, or upscale, you will confuse the heuristics of the player and get completely different colors. Also, you definitely want to have the same colors across different players. The only proper way to solve this problem is to take the guesswork out of players by setting explicit hints about each color property.
So, what are the "correct" color properties? According to this post, I gathered that SD video follows the BT.601 standard. In this standard, you have the following properties:
EDIT: Updated with hopefully more correct suggestions as provided by H273 specification.
- BT.601 Primaries
- NTSC
- SMPTE 170M (usually), BT.470M (obsolete)
- PAL
- BT.470BG
- BT.601 Matrix
- SMPTE 170M/BT.470BG
- BT.601 Transfer
- NTSC
- SMPTE 170M/BT.709 (usually), BT.470M (obsolete)
- PAL
- SMPTE 170M/BT.709
Notably, NTSC apparently used BT.470M primaries in the far past, but switched to SMPTE 170M in the recent past. Thankfully, PAL always used BT.470B/G.
This worked for me so far, but I recently hit a problem. I got some PAL videos captured from a Canopus ADVC-100. After I process the videos and compare with the original in VLC Player, I notice that the colors are slightly off. After some experimentation, it seems like I need to use the "gamma 2.8" transfer instead of "BT.470B/G" in order to get the same colors as the raw source. This contradicts the notes above, and also, I have another batch of videos captured over Firewire from a Sony Digital8 Handycam, and those use "BT.470B/G" in VLC Player, not "gamma 2.8". Does anybody know what's the deal here? Which transfer is correct for PAL SD video? How does VLC Player decide to use one or the other?
Thanks!
Over the past few months, I've had the chance to work with a significant variety of SD video. One of my biggest issues every time is getting the colors to "look right". When you capture analog video (even the Digital8 format), there is no metadata that specifies the color matrix, primaries, and transfer. As you already know, these differ not only between PAL and NTSC, but also within each format. So if you get one of the properties wrong, colors may look identical, very similar, or completely different, depending on what you got wrong.
What happens when you play a video like this in, say, VLC Player? Since there are no hints present about the color properties, the player will try to guess them based on the remaining properties of the video. That is framerate, video size, interlacing, etc. But if you process the video, say de-interlace with bobbing, or upscale, you will confuse the heuristics of the player and get completely different colors. Also, you definitely want to have the same colors across different players. The only proper way to solve this problem is to take the guesswork out of players by setting explicit hints about each color property.
So, what are the "correct" color properties? According to this post, I gathered that SD video follows the BT.601 standard. In this standard, you have the following properties:
EDIT: Updated with hopefully more correct suggestions as provided by H273 specification.
- BT.601 Primaries
- NTSC
- SMPTE 170M (usually), BT.470M (obsolete)
- PAL
- BT.470BG
- BT.601 Matrix
- SMPTE 170M/BT.470BG
- BT.601 Transfer
- NTSC
- SMPTE 170M/BT.709 (usually), BT.470M (obsolete)
- PAL
- SMPTE 170M/BT.709
Notably, NTSC apparently used BT.470M primaries in the far past, but switched to SMPTE 170M in the recent past. Thankfully, PAL always used BT.470B/G.
This worked for me so far, but I recently hit a problem. I got some PAL videos captured from a Canopus ADVC-100. After I process the videos and compare with the original in VLC Player, I notice that the colors are slightly off. After some experimentation, it seems like I need to use the "gamma 2.8" transfer instead of "BT.470B/G" in order to get the same colors as the raw source. This contradicts the notes above, and also, I have another batch of videos captured over Firewire from a Sony Digital8 Handycam, and those use "BT.470B/G" in VLC Player, not "gamma 2.8". Does anybody know what's the deal here? Which transfer is correct for PAL SD video? How does VLC Player decide to use one or the other?
Thanks!