ProRes
37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0ProRes is Apple’s family of intra-frame, DCT-based editing and mastering codecs. Every frame is coded independently, so it decodes cheaply and scrubs well, and it is visually near-lossless at high data rates. It is lossy at every profile, but a good editing intermediate: it is accepted by Final Cut Pro, DaVinci Resolve, Premiere Pro and most other NLEs, and widely requested for delivery masters.
| Profile | FFmpeg -profile:v | Chroma | Bit depth | Approx. 1080p29.97 rate |
|---|---|---|---|---|
| 4444 XQ | 4444xq | 4:4:4 + alpha | up to 12-bit (alpha up to 16) | 500 Mb/s |
| 4444 | 4444 | 4:4:4 + alpha | up to 12-bit (alpha up to 16) | 330 Mb/s |
| 422 HQ | hq | 4:2:2 | 10-bit | 220 Mb/s |
| 422 | standard | 4:2:2 | 10-bit | 147 Mb/s |
| 422 LT | lt | 4:2:2 | 10-bit | 102 Mb/s |
| 422 Proxy | proxy | 4:2:2 | 10-bit | 45 Mb/s |
Rates are Apple’s targets; they scale with resolution and frame rate and vary with content. Note that these are megabits per second, not megabytes.
Encode with FFmpeg
Section titled “Encode with FFmpeg”FFmpeg has several ProRes encoders. prores_ks is the one to use: it supports every profile, alpha and the options below. prores_aw is faster with fewer controls, prores_videotoolbox uses Apple’s hardware encoder on macOS, and FFmpeg 8.1 added a Vulkan version of prores_ks.
For ordinary 4:2:2 material:
ffmpeg -i input.mkv -c:v prores_ks -profile:v hq -pix_fmt yuv422p10le -c:a pcm_s16le output.movprores_ks only accepts yuv422p10le, yuv444p10le and yuva444p10le, so 8-bit sources are converted to 10-bit. Keep -pix_fmt yuv422p10le with the 422 profiles: from a 4:4:4 or RGB source, FFmpeg would otherwise pick 4:4:4 and write a non-standard 4:4:4 stream labelled HQ. Without -profile:v, prores_ks picks HQ for 4:2:2 input and 4444 for 4:4:4 input. PCM audio is the norm in MOV.
Use a 4444 profile and an alpha-capable pixel format to keep transparency:
ffmpeg -i input.mov -c:v prores_ks -profile:v 4444 -pix_fmt yuva444p10le output.movOnly the alpha channel is lossless; colour is still lossy. -alpha_bits sets the stored alpha precision (16 by default). FFmpeg reports 4444 streams as yuv444p12le/yuva444p12le when decoding, because the profile carries up to 12 bits; the encoder itself works from 10-bit input.
-vendor apl0 only changes the four-character encoder ID written into each frame header (FFmpeg writes Lavc by default). It does not change the picture.
Hardware and software support
Section titled “Hardware and software support”- Apple Silicon Macs have hardware ProRes encode and decode engines in the media engine, starting with the M1 Pro and M1 Max.
- Apple’s own ProRes tools are the reference. FFmpeg’s encoders and decoder are independent implementations.
- ProRes RAW is a separate format that stores sensor data and is demosaiced on playback. Conventional ProRes encoders do not produce it, and the profiles above do not apply to it. FFmpeg 8.0 and later can decode it.
- ProRes is an editing codec, not a distribution codec. Files are large and browsers do not play them; make an AVC, VP9 or AV1 rendition for the web.