# ProRes

Canonical URL: https://encode.wiki/codecs/video/prores/
Content version: ca42e61ede0a24f789d7287a0001244ad22f4abf
Status: current
License: CC BY-SA 4.0
Checksum (SHA-256): 394d47d269c40a7bbb11921e1b7e2fe777114b44bdbe6c172a778ccd0505621e

ProRes 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

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:

```sh
ffmpeg -i input.mkv -c:v prores_ks -profile:v hq -pix_fmt yuv422p10le -c:a pcm_s16le output.mov
```

`prores_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:

```sh
ffmpeg -i input.mov -c:v prores_ks -profile:v 4444 -pix_fmt yuva444p10le output.mov
```

Only 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

- 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.
