ProRes 444

It would be nice to have ProRes 444 as output format in order to upscale ProRes 444 files properly and keep the 12bit color depth. Currently, exporting to OpenEXR or PNG 16 bits is the only substitute, but you then have transcode to ProRes 444 if you want a playable video. ProRes 444 is widely used in high end video creation.

Easily done by adding a line like below to your encoders.json

{
“text”: “ProRes 4444 Standard”,
“encoder”: “-c:v prores_ks -profile:v 4 -vendor apl0 -quant_mat hq -bits_per_mb 8000 -pix_fmt yuva444p12le”,
“ext”: [
“mov”
],
“transcode”: “aac -b:a 320k -ac 2”,
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [16255,16255],
“maxBitDepth”: 12,
“doNotScaleFullColorRange”: “transcode”
},

Which is located in

C:\ProgramData\Topaz Labs LLC\Topaz Video AI\models

Prores_ks encoder for Win only supports to 10bit.

You can increase the encoders you can use from the GUI by adding to encoders.json, but first you need to find out what encoders you can use with FFMPEG and what color formats they support.

First, use the following commands to find out which encoders can be used.

"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg.exe" -encoders

Encoders:
 V..... = Video
 A..... = Audio
 S..... = Subtitle
 .F.... = Frame-level multithreading
 ..S... = Slice-level multithreading
 ...X.. = Codec is experimental
 ....B. = Supports draw_horiz_band
 .....D = Supports direct rendering method 1
 ------

~~~
 VFS... prores_ks            Apple ProRes (iCodec Pro) (codec prores)
~~~

Next, you can use the following commands to check the supported color formats and options for the encoder.

"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg.exe" -h encoder=prores_ks

Encoder prores_ks [Apple ProRes (iCodec Pro)]:
    General capabilities: threads 
    Threading capabilities: frame and slice
    Supported pixel formats: yuv422p10le yuv444p10le yuva444p10le
ProRes encoder AVOptions:
  -mbs_per_slice     <int>        E..V....... macroblocks per slice (from 1 to 8) (default 8)
  -profile           <int>        E..V....... (from -1 to 5) (default auto)
     auto            -1           E..V.......
     proxy           0            E..V.......
     lt              1            E..V.......
     standard        2            E..V.......
     hq              3            E..V.......
     4444            4            E..V.......
     4444xq          5            E..V.......
  -vendor            <string>     E..V....... vendor ID (default "Lavc")
  -bits_per_mb       <int>        E..V....... desired bits per macroblock (from 0 to 8192) (default 0)
  -quant_mat         <int>        E..V....... quantiser matrix (from -1 to 6) (default auto)
     auto            -1           E..V.......
     proxy           0            E..V.......
     lt              2            E..V.......
     standard        3            E..V.......
     hq              4            E..V.......
     default         6            E..V.......
  -alpha_bits        <int>        E..V....... bits for alpha plane (from 0 to 16) (default 16)

Look at the “Supported pixel formats: yuv422p10le yuv444p10le yuva444p10le”.
Only 10-bit color formats are supported; if you input 12-bit or more, it will be converted to 10-bit.

2 Likes

I’ve explained how to do it and you’re 100% incorrect about it being only 10 bit.

Incompatible pixel format 'yuva444p12le' for codec 'prores_ks', auto-selecting format 'yuva444p10le'

I tried “yuva444p12le” but I get the above message and it converts to “yuva444p10le”.

Works fine here for me with the commands I gave and is confirmed 12 bit in Davinci Resolve.

Stream #0:0[0x1]: Video: prores (4444) (ap4h / 0x68347061), yuva444p12le(tv, progressive), 1920x1080, 479701 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 15360 tbn (default)

Did you set -profile 4 ?

Try the setting I gave to use as an output via the GUI

Thanks a lot guys, you are truly helpful and proficient ! :wink:
I’m going to test this.

1 Like

If you select Prores4444 (Profile 4), it will be created with 12-bit Prores, perhaps for compatibility, but since the input is limited to 10 bits, it does not make any sense other than to maintain the alpha channel.
Also, the current TVAI cannot handle the alpha channel, so that doesn’t make sense either.

By the way, is there any mention of “Incompatible pixel format~” in your TVAI log file?
Please check it once.

1 Like

No errors at all and like I said both Davinci Resolve and ffprobe confirm the encoding is 12 bit.

Then try this CLI.

"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg" -y -i input.mov -an -c:v prores_ks -profile:v 4 -vendor apl0 -pix_fmt yuva444p12le output_prores.mov

You should get an Incompatible pixel format message.

The only pixel formats currently supported by Prores_ks are yuv422p10le yuv444p10le yuva444p10le.
It is output as 12-bit, but it is just a padding of the data input as 10-bit.

"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg" -y -i input.mov -an -c:v prores_ks -profile:v 4 -vendor apl0 -pix_fmt yuva444p prores_yuva444p.mov
"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg" -y -i input.mov -an -c:v prores_ks -profile:v 4 -vendor apl0 -pix_fmt yuva444p10le prores_yuva444p10le.mov
"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg" -y -i input.mov -an -c:v prores_ks -profile:v 4 -vendor apl0 -pix_fmt yuva444p12le prores_yuva444p12le.mov
"C:\Program Files\Topaz Labs LLC\Topaz Video AI\ffmpeg" -y -i input.mov -an -c:v prores_ks -profile:v 4 -vendor apl0 -pix_fmt yuva444p16le prores_yuva444p16le.mov

Addition.
8-bit, 10-bit, 12-bit, 16-bit, all encoded as 12-bit Prores.

After more testing I see your point, well spotted and yup it defaults to 12 bit no matter the encoder used. :+1:

1 Like

Since 10-bit AV1 compression is supported by 40X0 gpus, that would be a nice addition, but doesn’t solve the need for a 12-bit option. Somebody must have done an accelerated 12-bit AV1 implementation by now, but perhaps the license is $$$?

Semi-interestingly, the Topaz build of ffmpeg allows yuv444p16le as a pix_fmt to hevc encoding, in fact it forces promotion for some input settings, but the end result probes as yuv444p10le.

How about adding (accelerated) FFV1 (422p12)? Resolve, IETF and conditional LoC support means it’s not a dead-end.

SMPTE PQ allows for 19-23 "g"bpc (gamma-encoded bpc) of range, depending on gamma, and if you can reach 15-stops of raw, that’s still 11-13 "g"bits. pro work is 12-bits, so…?

Hello,

FFV1 has now been added to the default encoders list in Video AI 3.4.2.

So, of course, I launch Topaz right after sending this and it mentions that 4.4.2 has FFV1 support!
However, I installed while I still had the video-encoders.json file open and so that file didn’t update, no FFV1 joy, so I made my own additions…

Prores - limited, I realize in reality, although the files do say 12-bit.
{
“id”: “prores-422-xq-win”,
“encoder”: “ProRes”,
“profile”: “4444 XQ”,
“ffmpegOpts”: “-c:v prores_ks -profile:v 4444xq -pix_fmt yuv444p16le”,
“ext”: [
“mov”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [16255,16255],
“maxBitDepth”: 12,
“doNotScaleFullColorRange”: “transcode”
},

FFV1:
{
“id”: “ffv1-422-12-win”,
“encoder”: “FFV1”,
“profile”: “422 12”,
“ffmpegOpts”: “-c:v ffv1 -level:v 3 -slicecrc 1 -pix_fmt yuv422p12le”,
“ext”: [
“mkv”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [16255,16255],
“maxBitDepth”: 12,
“doNotScaleFullColorRange”: “transcode”
},
{
“id”: “ffv1-422-16-win”,
“encoder”: “FFV1”,
“profile”: “422 16”,
“ffmpegOpts”: “-c:v ffv1 -level:v 3 -slicecrc 1 -pix_fmt yuv422p16le”,
“ext”: [
“mkv”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [16255,16255],
“maxBitDepth”: 16,
“doNotScaleFullColorRange”: “transcode”
},
{
“id”: “ffv1-444-16-win”,
“encoder”: “FFV1”,
“profile”: “444 16”,
“ffmpegOpts”: “-c:v ffv1 -level:v 3 -slicecrc 1 -pix_fmt yuv444p16le”,
“ext”: [
“mkv”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [16255,16255],
“maxBitDepth”: 16,
“doNotScaleFullColorRange”: “transcode”
},

Unfortunately, VC2, which supports 12-bits on paper, is a definite orphan, and I can’t get anything over 4K to render correctly, although the spec says 8K should work. But it might be useful for 4K intermediate files:

{
“id”: “vc2-422-12-800M-win”,
“encoder”: “VC2”,
“profile”: “422 12 800Mbps”,
“ffmpegOpts”: “-c:v vc2 -b:v 800M -pix_fmt yuv422p12le”,
“ext”: [
“mkv”,
“mp4”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [4096,4096],
“maxBitDepth”: 12,
“doNotScaleFullColorRange”: “transcode”
},
{
“id”: “vc2-422-12-1G-win”,
“encoder”: “VC2”,
“profile”: “422 12 1000Mbps”,
“ffmpegOpts”: “-c:v vc2 -b:v 1000M -pix_fmt yuv422p12le”,
“ext”: [
“mkv”,
“mp4”
],
“os”: “windows”,
“minSize”: [1,1],
“maxSize”: [4096,4096],
“maxBitDepth”: 12,
“doNotScaleFullColorRange”: “transcode”
},

I can’t get this to work.
Is Prores 4444 supposed to appear as a profile in the export menu in Topaz when adding these lines to the video-encoders.json file?