I was silent for a year and to be fair I haven’t touched prores for a year as well, except last couple months
so whats happened:
Basically I was looking for my self, what I want to do and what kind of work makes me happy. I tried couple different projects but at the very end returned to the fact that reverse engineering and video codecs most interesting to me.
I returned back to reversing ProRes where I went trough couple different periods/questions:
1. Why would anyone need it if apple shares it for free?
2. Why would anyone need it if ffmpeg has 2 different implementations?
3. Why cant I contribute to ffmpeg?
Every period made my position that one more ProRes encoder needed even stronger, and here are my answers on questions I asked my self:
1. First of all its possible to get Apple implementation (obviously not source codes) for free my previous employee experience confirms it, but procedure is unclear and seems you need connections as well
2. Both ffmpeg implementations far from what Apple encoder does. no one support 12 bit input, both produce bad ouptut especially for Proxy and XQ qualities.
2.1 Anatoly`s implementation has really poor rate control with all this min/max quant limits
2.1 Kostya`s implementation has better rate control but still nothing similar to what Apple does and waaay slower
3. At some point I tried to contribute to ffmpeg one of my patches was approved, but when I started to work on performance optimizations and pushed patch I just got ignored… Yes patch didnt break fate test, patch improved performance but was not approved as well as declined or anyhow commented it just will be for ever in the review state, and to be fair reading ffmpeg dev-emails I found that guys more open to fight about sponsored changes than something else, so yes deep inside ffmpeg became super commercialized 🙁
So now about progress I made:
1. I finished first version of encoder, which support 8/10/12 bit input, supports 422 and 444 input (alpha still not implemented)
2. Encoder has Apple similar rate control and to be fair on same input produce absolutely identical output comparing to Apple version
It is like x3 faster of ffmpeg encoder but still slower of Apple one (there are still a lot of room for optimizations)
Returning to the question why anyone would need one more ProRes encoder. here is pros of what I do:
- Absolutely identical output with apple implementation
- 12 bit support
- At some point Prores RAW will be added
Another words its way better of what ffmpeg does and easy to port to any platform (which not that easy to get from Apple in case you succeeded to get anything)
But the main reason is new Product I`m building based on this encoder.
When I started understand well Apple bitstream and logic in general. I almost immediately had couple ideas how to use it:
1. In-place editing. for example you dont like couple frames in your final file, now you can replace it without re-encoding whole file.
1.1. You cant do it with Apple implementation as you cannot control output frame size.
1.2. You can do it with Cinedeck tools (but you would need to re-wrap your file) as they relay on Apple implementation, its probably not a big deal if your file is couple hundred megabytes, but if its hundreds of gigabytes? and your file on S3?
2. I decided to go even further. Lets say you need to put logo on your frame or blur any part of frame, now you can not only replace frames inside file, but its possible to replace part of any frame, another words to add logo to ProRes encoded frame you would need to re-encode only that part of frame where logo will be placed
thats bassicly it. sounds exciting? ping me if you going to NAB2019 so you can see how powerfull it is!