I am trying to understand how to use Prores Kostya with FFmpeg, and I have a few questions regarding this:

  1. I have a Panasonic G85 and Gopro Hero 7 black which I used to shoot 4k in. For 4k footage, the Panasonic records at 4:2:0 8-bit at 100 Mbps, and the Gopro 8 bit 4:2:0 at 78 Mbps. With this in mind is there any point in selecting a Prores profile other than ProRes 422 LT? The reason I say this is because the LT profile has 102 Mb/s, which exceeds the source footage from both cameras.

  2. I have read that the qscale command is not needed, and a user can just select a profile which will define a standard bit rate (for LT this is 102 Mb/s). I have seen people saying that ProRes is a profile-based codec, meaning that when you select one of the profiles, it does a fixed amount of compression, defined in the spec. If you want a different compression level, you're supposed to choose a different profile, rather than change a quality setting with the qscale command, as this may result in a violation of the standard, and have the potential to cause playback issues (particularly with hardware decoders). So with this in mind is it better to miss out the qscale command?

  3. Why is it necessary to specify the -pix_fmt, as I thought all the 422 profiles defaulted to yuv422p10le and all the 4444 profiles defaulted to yuv4444p10le. So why is there a need to specify this value?

1 Answer 1


1) your Panasonic footage will be H.264; GoPro may be H.264 or H.265. These are inter-frame codecs whereas ProRes is an intra-frame codec (each frame is coded standalone and doesn't depend on other frames for decoding). So, you should consider a higher bitrate to maintain source quality.

2) FFmpeg does allow you to set a custom quantizer but by default it will use a fixed quality setting per profile. For custom quant, use -global_quality N.

3) FFmpeg has to convert to the given pixel format which is what output -pix_fmt will do. The encoder only encodes i.e. takes in raw uncompressed input frames and delivers coded data.

  • Thanks for your reply. I just want to clarify a couple of thing: 1) You say I should consider a higher bitrate to maintain source quality. But what is a good profile to go for to balance quality against file size? My Panasonic footage and GoPro footage only starts out at 100Mbps and 78Mbps respectably. So it's not very high to begin with. 2) I understand about the custom quantizer, but is there any point in using it? For comparability why not just rely on the default for that profile and if you want higher select a different profile?
    – tommydog35
    Jul 11, 2019 at 7:25
  • 1) Use standard. 2) No, profile default is fine.
    – Gyan
    Jul 11, 2019 at 8:33
  • Thanks for clarifying points 1 and 2. With respect to point 3, why is it necessary to specify the -pix_fmt if using a ProRes 422 profile (422 HQ, ProRess 422, ProRes 422 LT, ProRes 422 Proxy) Just by selecting a 422 profile, it is obvious that the footage is to be encoded as 422. Therefore there should be no need to tell it you want a 422 colour space. The same as if you choose a ProRes 444 profile, I don't see why it is then necessary to tell the encoder you want the footage encoded as 444. This should be obvious based on the profile you select. Am I missing something?
    – tommydog35
    Jul 11, 2019 at 8:58
  • FFmpeg is modular - pix_fmt is meant for the scaler library, profile is a private instruction to the encoder. The reason there's no automatic management across the pipeline is because there are hundreds of encoders and dozens of scaler configurations, not to mention parameters for other modules so there's no non-convoluted way to make it happen by 'magic'.
    – Gyan
    Jul 11, 2019 at 9:18
  • Thank you very much you have answered all my questions. Just one other thing as you seem to be very knowledgeable - Do you know what the maximum supported frame rates are when encoding to Prores and DNxHR? I read DNxHD only goes to 60fps. But what is the limit for Prores and DNxHR? Is is 120fps?
    – tommydog35
    Jul 11, 2019 at 9:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.