Converting common consumer device video codecs, like h264 and h265, to DNxHD or DNxHR for fast editing.
The DNxHD ("Digital Nonlinear Extensible High Definition") and DNxHR ("Digital Nonlinear Extensible High Resolution") are lossy video codecs that are intended to be usable as both an intermediate format suitable for use while editing and as a presentation format. Usually using a MXF or QuickTime MOV container.
As an example for why you might like to convert video files to DNxHD or DNxHR we give DaVinci Resolve. DaVinci Resolve is a professional video editing application by BlackMagic Design. The "Basic" version is available for Linux, Mac and Windows environment for free. It supports various professional video codecs, but unlike consumer editors it does lack in support for consumer video formats under Linux for some reason. For example, the common h264 and h265 encoded videos produced by most consumer devices (phones, GoPro, camcorders, etc) will be imported with audio only under Linux (In version 15 and 16 of Resolve Free).
Fortunately the solution to this issues is quite simple, even if a bit space and time consuming, by converting the video files to a DNxHD or DNxHR with FFmpeg. DNxHD is a more editor friendly format as every frame is compressed separately instead of relying on previous frames and therefore the editing software can easily seek frame accurately in the video without need to decompress any intermediate frames. It is still a lossy format so take that into account when choosing the bitrate, larger is obviously better, downside is the space requirement. This way obviously leads to much larger files, meaning you need quite a lot of disk space for the converted videos.
DNxHD
DNxHD support Full HD (1920x1080) and HD (1280x720) frame sizes only. DNxHD also is very strict about video frame size, pixel format and framerate. The ffmpeg output format must match precisely one of the DNxHD profiles below:
DNxHD profiles for Full HD, 1920x1080, 1080p
Frame size | Bitrate | Pixel Format | FPS | GB/Minute |
---|---|---|---|---|
1920x1080p | 175Mbps | yuv422p10 | 24 (24000/1001) | 1.26 GB |
1920x1080p | 185Mbps | yuv422p10 | 25 | 1.38 GB |
1920x1080p | 365Mbps | yuv422p10 | 50 | 2.7 GB |
1920x1080p | 440Mbps | yuv422p10 | 60 (60000/1001) | 3.3 GB |
1920x1080p | 115Mbps | yuv422p | 24 (24000/1001) | 0.84 GB |
1920x1080p | 120Mbps | yuv422p | 25 | 0.9 GB |
1920x1080p | 145Mbps | yuv422p | 30 (30000/1001) | 1 GB |
1920x1080p | 240Mbps | yuv422p | 50 | 1.8 GB |
1920x1080p | 290Mbps | yuv422p | 60 (60000/1001) | 2.1 GB |
1920x1080p | 175Mbps | yuv422p | 24 (24000/1001) | 1.2 GB |
1920x1080p | 185Mbps | yuv422p | 25 | 1.38 GB |
1920x1080p | 220Mbps | yuv422p | 30 (30000/1001) | 1.62 GB |
1920x1080p | 365Mbps | yuv422p | 50 | 2.7 GB |
1920x1080p | 440Mbps | yuv422p | 60 (60000/1001) | 3.3 GB |
1920x1080p | 36Mbps | yuv422p | 24 (24000/1001) | 0.24 GB |
1920x1080p | 36Mbps | yuv422p | 25 | 0.24 GB |
1920x1080p | 45Mbps | yuv422p | 30 (30000/1001) | 0.3 GB |
1920x1080p | 75Mbps | yuv422p | 50 | 0.54 GB |
1920x1080p | 90Mbps | yuv422p | 60 (60000/1001) | 0.66 GB |
1920x1080p | 350Mbps | yuv422p10 | 24 (24000/1001) | |
1920x1080p | 390Mbps | yuv422p10 | 25 | |
1920x1080p | 440Mbps | yuv422p10 | 30 (30000/1001) | |
1920x1080p | 730Mbps | yuv422p10 | 50 | |
1920x1080p | 880Mbps | yuv422p10 | 60 (60000/1001) |
DNxHD profiles for HD, 1280x720, 720p
Frame size | Bitrate | Pixel Format | FPS | GB/Minute |
---|---|---|---|---|
1280x720p | 90Mbps | yuv422p10 | 24 (24000/1001) | |
1280x720p | 90Mbps | yuv422p10 | 25 | |
1280x720p | 180Mbps | yuv422p10 | 50 | |
1280x720p | 220Mbps | yuv422p10 | 60 (60000/1001) | |
1280x720p | 90Mbps | yuv422p | 24 (24000/1001) | |
1280x720p | 90Mbps | yuv422p | 25 | |
1280x720p | 110Mbps | yuv422p | 30 (30000/1001) | |
1280x720p | 180Mbps | yuv422p | 50 | |
1280x720p | 220Mbps | yuv422p | 60 (60000/1001) | |
1280x720p | 60Mbps | yuv422p | 24 (24000/1001) | |
1280x720p | 60Mbps | yuv422p | 25 | |
1280x720p | 75Mbps | yuv422p | 30 (30000/1001) | |
1280x720p | 120Mbps | yuv422p | 50 | |
1280x720p | 145Mbps | yuv422p | 60 (60000/1001) |
How to pick the output format ?
The output DNxHD frame format (Resolution and FPS) must match the video format of the source, so make sure you choose a suitable format from the above table.
For example if your input video is a Full HD 1920x1080, 25 FPS then you can choose output bit rates of 120, 185 or 46 Mbps. Choose the bit rate depending on how good quality you need for whatever you need to do with the DNxHD video, the bigger bit rate the more space the output video will take.
Example commands for converting to DNxHD with FFmpeg
Description | FFmpeg command line |
---|---|
Input: MP4, Full HD, 50fps Output: DNxHD 1920x1080p, yuv422p, 75Mbps, 50fps, Uncompressed PCM audio |
ffmpeg -i input-video.mp4 -c:v dnxhd -vf "fps=50/1,format=yuv422p" -b:v 75M -c:a pcm_s16le output-video.mov |
Hardware accelerated decoding of h264 Input: MP4, Full HD, 50fps Output: DNxHD 1920x1080p, yuv422p, 75Mbps, 50fps, Uncompressed PCM audio |
ffmpeg -c:v h264_cuvid -i input-video.mp4 -c:v dnxhd -vf "fps=50/1,format=yuv422p" -b:v 75M -c:a pcm_s16le output-video.mov |
DNxHR
DNxHR is a more modern variant and much easier to use as FFmpeg will take of details like bit rate so conversion is much easier. It supports 422 and 444 colorspaces in 8-bit, 10-bit and 12-bit variants, FFmpeg only support up to 10-bits (pixel formats yuv422p, yuv422p10le and yuv444p10le)
DNxHR Profiles
Profile | Description | FFmpeg option | ~GB/minute |
---|---|---|---|
LB | Low Bandwidth (8-bit 4:2:2) | dnxhr_lb | 4K, 25fps: 1GB |
SQ | Standard Quality (8-bit 4:2:2) | dnxhr_sq | 4K, 25fps: 3.5GB |
HQ | High Quality (8-bit 4:2:2) | dnxhr_hq | 4K, 25fps: 5GB |
HQX | High Quality (12-bit 4:2:2) | dnxhr_hqx | |
444 | Finishing Quality (12-bit 4:4:4) | dnxhr_444 |
Example commands for converting to DNxHR with FFmpeg
Description | FFmpeg command line |
---|---|
Input: MP4, 4K, 25fps Output: DNxHR, HQ, 4K, 25fps, Uncompressed PCM audio |
ffmpeg -i input-video.mp4 -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a pcm_s16le output-video.mov |
Hardware accelerated decoding of h264 Input: MP4, Full HD, 50fps Output: DNxHD 1920x1080p, yuv422p, 75Mbps, 50fps, Uncompressed PCM audio |
ffmpeg -c:v h264_cuvid -i input-video.mp4 -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a pcm_s16le output-video.mov |