Hi there Seth,
So, the ProRes4444 format is a little weird, and a little weirder still in FFmpeg. Since it’s nothing but a ‘profile’ to the prores_ks encoder, it works like any other Prores encode would, and that (plus some reverse engineering done on the Apple decoder) suggests that ProRes even at 4444 is an YUV / Y’CbCr codec. That’s also what you told ffmpeg to export, and even when you input an rgb(a) it should default to yuva444p10le as the output:
(single frame output for example)
ffmpeg -i ~/0001077.dpx -codec:v prores_ks -profile:v 4444 -pix_fmt gbrp12le -r 23.976 ~/grb12_test_apr4444.mov
ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
--snip header--
Input #0, dpx_pipe, from ‘~/0001077.dpx':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: dpx, gbrp12le, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 tbr, 25 tbn, 23.98 tbc
Stream mapping:
Stream #0:0 -> #0:0 (dpx (native) -> prores (prores_ks))
Press [q] to stop, [?] for help
Incompatible pixel format 'gbrp12le' for codec 'prores_ks', auto-selecting format 'yuv444p10le'
Output #0, mov, to '~/grb12_test_apr4444.mov':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: prores (prores_ks) (ap4h / 0x68347061), yuv444p10le, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 23.98 fps, 11988 tbn, 23.98 tbc
Metadata:
encoder : Lavc57.89.100 prores_ks
frame= 1 fps=0.0 q=-0.0 Lsize= 1321kB time=00:00:00.00 bitrate=130373686.7kbits/s speed=0.000376x
video:1320kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.054886%
Secondly, as far as I know, currently FFmpeg does not support encoding deeper than 10bit pixel formats. (as suggested by the ‘p10le’ tail on the pix_fmt you supplied in your arguments). Reading a deeper-than-10-bit ProRes file will also give you the estimated yuva444p10le pixel format.
So that is where the colorshift might originate from. And that’s as much explanation as I can give you, considering I don’t know the system you’re working in or what color shift exactly happens.
If you need to encode to a mastering _video_ format in RGB, consider Apple Animation as it’s a RLE (linear) encoder that supports RGB pixel information.
For windows, I think you’d be stuck exporting a 10bit uncompressed video? (Which will be giant in filesize)