Some people wanted to have ProRes encoder in Libav so I wrote one. And from what I gather it even has one user (not me).
In case someone is interested here is the list of possible options:
profile
— selects ProRes profile to encode (proxy
,lt
,standard
orhq
)quant_mat
— selects quantisation matrix from one of profiles (proxy
,lt
,standard
orhq
). If you don’t specify it, the matrix will be picked from default profile (or useauto
to be really sure). There’s alsodefault
matrix which should give the highest quality (it’s default in the sense that when quantisation matrix is not provided in frame decoder defaults to this one).bits_per_mb
— how many bits to give for coding one macroblock, different profiles use from 200 bits per macroblock to 2400, one can set it up to 8000.mbs_per_slice
— how many macroblocks are there in slice, 1-8. Default value of eight should be good for almost all situations though.vendor
— one can put custom vendor ID into frame likeapl0
to claim it was produced by Apple encoder.qscale
— set fixed quantiser
How to make it encode faster?
In default mode of operation encoder has to honour frame constraints (i.e. not producing frames with size bigger than defined) while still making output picture as good as possible.
If the frame contains lots of small details it’s harder to compress it and encoder spends more time in search for appropriate quantisers for each slice. Thus setting higher bits_per_mb
limit
will improve the speed.
Or if you don’t care about frame size constraints just set qscale
parameter to something (I’d recommend 4) and see it encode MUCH faster.
Feel free to leave wishes for features in comments, hopefully I can implement it when I have time.
P.S. For proper 4444 profile support we need 10-bit YUV with alpha. When it’s in I can add that profile too.
ffmpeg -i "c:\Cub04d.png" -vcodec prores_ks -pix_fmt yuva444p16le -quant_mat hq -alpha_bits 16 -vprofile
4444 "c:\cube_output_test.mov"