ffmpeg Format settings, Matrix bt709
Solution 1
With re-encoding, use
ffmpeg -i test.mxf -c copy -c:v mpeg2video -b:v 5000k \
-color_primaries 1 -color_trc 1 -colorspace 1 out.mxf
In Mediainfo, at the end of the video stream attributes, you should see the three color-related entries. Note that Format settings (Matrix) is related to MPEG quantization and not color.
Solution 2
After much searching, the secret option that has to be passed to ffmpeg for proper BT.709 encoding is found to be inside the video filter feature. Note that the -vf video filter option actually transforms while the other 709 flags just indicate what flags will be included in the container.
This example starts with a 32x32 png that is set to (0, 0, 255) or max blue.
ffmpeg -y -i Blue32x32.png -c:v libx264 -pix_fmt yuv420p -preset:v slow -profile:v baseline -crf 20 -vf scale=out_color_matrix=bt709 -color_primaries bt709 -color_trc bt709 -colorspace bt709 Blue32x32_709.m4v
ffmpeg -y -i Blue32x32_709.m4v Blue32x32_709.y4m
od -v -t u1 Blue32x32_709.y4m
The output of the last command dumps byte values as ints, you should see (Y Cb Cr) values as Y = 32, Cb = 240, Cr = 118 which means the BT.709 conversion matrix is being used in the .m4v file. When decoded back to RGB the transformed color is (2 0 255).
user1722669
Updated on December 17, 2020Comments
-
user1722669 over 3 years
Does anyone know how I can achieve the following color space (bt.709) via FFmpeg?
Here is what I have now in my files...As you can see there is
Format settings, Matrix
as default, how can I set it like this :- Format settings (Matrix) : Custom or Standard
- Component Color primaries : BT.709
- Transfer characteristics : BT.709
- Matrix coefficients : BT.709
Thank you
-
user1722669 about 8 yearsMulvya, Thank you for your help, Indeed -color_primaries 1 -color_trc 1 -colorspace 1 is working, but I would like also to know how to set Format settings (Matrix) : Custom or Standard if it would be possible, thank you.
-
user1722669 over 5 years"Note that the -vf video filter option actually transforms while the other 709 flags just indicate what flags will be included in the container" Indeed -color_primaries 1 -color_trc 1 -colorspace 1 only writes the metadata information. While the filter approach will transform your content to BT.709
-
MoDJ over 5 yearsJust FYI, it appears that this ffmpeg command creates only Gamma 1.0 YCbCr data, more info about 709 gamma issues can be found at this SO question stackoverflow.com/questions/53911662/…
-
astgtciv over 4 yearsSince primaries for sRGB and BT.709 are the same, and AFAIK gamma correction should do nothing to 0000FF, shouldn't we get straight-up RGB-to-YCbCr conversion in this case? I do get Y = 41, Cb = 240, Cr = 110 when following these instructions, and indeed this matches picturetopeople.org/p2p/image_utilities.p2p/… . Where did the "Y = 32, Cb = 240, Cr = 118" values come from?