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
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.
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).