Skip to content

ProRes

currentMigrated from docs/video/prores.mdx at 37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0

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.

ProfileFFmpeg -profile:vChromaBit depthApprox. 1080p29.97 rate
4444 XQ4444xq4:4:4 + alphaup to 12-bit (alpha up to 16)500 Mb/s
444444444:4:4 + alphaup to 12-bit (alpha up to 16)330 Mb/s
422 HQhq4:2:210-bit220 Mb/s
422standard4:2:210-bit147 Mb/s
422 LTlt4:2:210-bit102 Mb/s
422 Proxyproxy4:2:210-bit45 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.

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:

Terminal window
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:

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

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