As I got some questions about progress I decided to post some updates and clarifications:
- I succeeded to improve performance so now encoder a bit faster of Apple implementation with identical output (and I still see room for improvements)
- I fixed some minor issues and fully implemented XQ profile
- About 12 bit support: there was a thread in ffmpeg dev list where some core developers were claiming 12-bit Prores is a myth so you know Apple encoder encode all data as 12 bit even if you pass 8-bit uyvy it first converted to 12 bits and encoded after that
- Based on statement (3) I can expose big mistake I made in Cinedeck Prores Insert-Edit. Basically Cinedeck checks some stream parameters to make the decision if input stream should be re-encoded or not before insert. One of them is src pixel format and if input and output has different src pixel formats video gets re-encoded before insert which now i can say is wrong behavior as basically on encoder side its always 12 bit and not src pixel format but chroma subsampling had to be checked
- There is one more util I work on. Its Prores smart transcoder:
Lets say we need to transcode Prores HQ to Prores Proxy, thats how any transcoding app will do it:
1) Decode frame (vlc decode -> dequantize -> inverse dct -> assemble slices to frame buffer
2) Encode (disassemble frame to slices, -> forward dct -> rate control -> quantize -> vlc encode)
From first point of view it looks ok, but from my point of view it should be:
1) vlc decode -> dequantize -> rate control -> quantize -> vlc encode
so basically I got rid of some heavy but useless steps which make transcode almost x2 faster comparing to the classical way
Obviously, it works only if you transcode from Prores to Prores
I`m still quite far to show demo (except some command line applications), but here is priority list:
- Make user friendly UI so it easy to show and use
- Finish MOV parser/muxer (as im not a fan to use FFMPEG for demo)