In an ideal world, there would be a video Coder/Decoder (CODEC) that supports an alpha channel (transparency) (with full support in Blackmagic Design's DaVinci Resolve and FFMPEG. The DNxHR
CODEC would be a great candidate, if only both DaVinci Resolve and FFMPEG would support the same bit depth with an alpha channel. This leaves us with:
-
For lossless source videos, the
Apple ProRes
is a good choice. DaVinci Resolve 17.1 can decode the format supporting an alpha channel, but not encode it. FFMPEG can decode and encode it with alpha. The odd times where an encode from DaVinci Resolve is needed, one can alway resort to theDNxHR
CODEC. -
For lossy source videos,
H.264
remains a great choice. Both programs fully support it the CODEC. In the odd case where lossy video with transparency is needed one can use Google's VP9.
The details of this quest and FFMPEG encoding parameters can be found below.
Lossless
Lossless video compression is great for source and intermediate material in video editing. Lossless video compression makes the video files smaller to work with while not loosing any quality.
Often video sources are delivered using many different CODECs. These need to be preprocessed using a CODEC that Davinci Resolve can decode. For the preprocessing, I most often use AviSynth+ scripts. These scripts are rendered using e.g. ffmpeg.
Common alpha channel support
Computer graphics sources commonly have an alpha (transparency) channel. I found that the only CODEC that FFMPEG can export to and DaVinci Resolve and import from is:
-
Apple ProRes
- Davinci Resolve decode: YUV 4:4:4 (10-bits) with alpha, YUV 4:4:4 (10-bits), YUV 4:2:2 (10-bits)
- Davinci Resolve encode: none
- ffmpeg git@2021-01-09 decode: yes, with alpha
- ffmpeg git@2021-01-09 encode: yes, with alpha
- ffmpeg options:
- YUVA 4:4:4 10-bits:
-pix_fmt yuva444p10 -c:v prores_ks -profile:v 4444xq prores-yuva444p10.mov
- YUVA 4:4:4 10-bits:
- FYI the ffmpeg options without alpha:
- YUV 4:2:2 10-bits:
-pix_fmt yuv422p10 -c:v prores_ks -profile:v hq prores-yuv422p10.mov
- YUV 4:4:4 10-bits:
-pix_fmt yuv444p10 -c:v prores_ks -profile:v 4444xq prores-yuv444p10.mov
- YUV 4:2:2 10-bits:
No common alpha channel support
-
GoPro CineForm
- Davinci Resolve decode: Native, YUV 10-bit, RGB 16-bit. No alpha.
- Davinci Resolve encode: YUV 10-bit, RGB 16-bit. No alpha
- ffmpeg git@2021-01-09 decode: yes, with alpha
- ffmpeg git@2021-01-09 encode: yes, with alpha
- ffmpeg options:
- RGB 12-bits:
-pix_fmt gbrp12 -c:v cfhd -quality film3+ cineform-rgbp12.avi
- RGB 12-bits:
-
DNxHR
- Davinci Resolve decode: YUV 4:4:4 (10-bits), YUV (4:2:2 8/10-bits). Somehow no alpha support, for all I could detect
- Davinci Resolve encode: YUV 4:4:4 10/12-bit, YUV 4:2:2 10/12-bit, YUV 4:2:2 8-bit. Alpha in 12-bit except for LB.
- ffmpeg git@2021-01-09 decode: yes
- ffmpeg git@2021-01-09 encode: yes, but no 12-bit
- ffmpeg options:
- YUV 4:2:2 8-bits:
-pix_fmt yuv422p -c:v dnxhd -profile:v dnxhr_hq dnxhr-yuv422p.mov
- YUV 4:2:2 10-bits:
-pix_fmt yuv422p10 -c:v dnxhd -profile:v dnxhr_hqx dnxhr-yuv422p10.mov
- YUV 4:4:4 10-bits:
-pix_fmt yuv444p10 -c:v dnxhd -profile:v dnxhr_444 dnxhr-yuv444p10.mov
- YUV 4:2:2 8-bits:
Lossy
Lossy compression is great for distributing a completed movie. Lossy compression makes the video file significantly smaller by reducing the quality. Popular lossy CODECs are the Moving Picture Experts Group's H.264 and H.265, and Google's VP9.
No common alpha channel support
-
H.264/AVC, no alpha support in CODEC
- Davinci Resolve decode: yes (GPU accelerated in Studio)
- Davinci Resolve encode: yes (GPU accelerated in Studio)
- ffmpeg git@2021-01-09 decode: yes
- ffmpeg git@2021-01-09 encode: yes
- ffmpeg options:
- YUV 4:2:0 8-bits:
-pix_fmt yuv420p -c:v libx264 -preset superfast -tune fastdecode -g 1 -crf 17 h264-yuv420p.mp4
- YUV 4:2:0 8-bits:
-
H.265
- Davinci Resolve decode: YUV 4:2:0 (8/10-bits). No alpha support. (GPU accelerated in Studio)
- Davinci Resolve encode: Studio only (GPU accelerated on Intel)
- ffmpeg git@2021-01-09 decode: yes, no alpha (yet)
- ffmpeg git@2021-01-09 encode: yes, no alpha (yet)
- ffmpeg options:
- YUV 4:2:0 8-bits:
-pix_fmt yuv420p -c:v libx265 -preset superfast -tune fastdecode -g 1 -crf 21 h265-yuv420p.mp4
- YUV 4:2:0 10-bits:
-pix_fmt yuv420p10 -c:v libx265 -preset superfast -tune fastdecode -g 1 -crf 21 h265-yuv420p10.mp4
- YUV 4:2:0 8-bits:
-
VP9
- Davinci Resolve decode: YUV 4:2:0 8-bits. No alpha support.
- Davinci Resolve encode: none
- ffmpeg git@2021-01-09 decode: yes, with alpha
- ffmpeg git@2021-01-09 encode: yes, with alpha
- ffmpeg options:
- YUVA 4:2:0 8-bits:
-pix_fmt yuva420p -c:v vp9 -g 1 -crf 32 vp9-yuva420p.mp4
- YUVA 4:2:0 8-bits:
References
- Davinci 16 Supported CODEC List
- Alpha Masking with FFMPEG
- Avisynth+ <–> Davinci Resolve 16
- Apple ProRes White Paper
- Using FFMPEG for DNxHD/DNxHR encoding, resizing, and batch encoding
ffmpeg -h encoder=prores_ks
ffmpeg -h encoder=prores_aw
ffmpeg -h encoder=prores
ffmpeg -h encoder=cfhd
ffmpeg -h encoder=dnxhd
ffmpeg -h encoder=vp9
ffmpeg -h encoder=libx264
x264 --fullhelp
ffmpeg -h encoder=libx265
x265 --fullhelp