H.264 vs. ProRes: equivalent quality with 3x smaller files

Canon 5D Mark III 14-bit RAW – The Baby Alexa

Canon 5D Mark III ML 14-bit RAW footage looks great. It provides some of the best color and image quality short of an ARRI Alexa/Amira. Converting the .MLV files to DNG can be pretty fast, however the file sizes are quite large. mlrawviewer provides ProRes 10-bit 444 output which looks great. The resulting files are still very large: ~280Mbps. I did an experiment to see if smaller files with equivalent quality were possible.

FFMPEG Compiled for 10-bit

FFMPEG is a powerful command line tool. It supports many inputs and outputs, and can be compiled to support 10-bits per pixel.  Using the 10-bit version of FFMPEG, it’s possible to output 422 10-bit H.264 files that visually match the quality of ProRes 444 10-bit at ~1/3 the file size (round 90Mbps)! It’s also possible to create 444 10-bit H.264 files, which VLC will play, however I have not been able to get an NLE to display them.

Compiling FFMPEG for 10-bit

FFMPEG must be compiled for 10-bit support. For general use, two versions of FFMPEG are needed: one for 8-bit and one for 10-bit. While it’s possible to compile FFMPEG for Windows on Windows, it’s faster and easier to set up and complete the cross-compile on Linux or OSX. Linux is the easiest, and I was able to build 10-bit FFMPEG using this: https://github.com/rdp/ffmpeg-windows-build-helpers. The only snag was the VMWare Ubuntu Linux VM was initially set up with 1GB of RAM. The build failed with an obscure error message. Googling revealed a possible memory problem. After restarting the VM with 4GB of RAM, it finished without issue. I had also started a build on my 2014 MBP (4-core), which was much faster than the 2-core (max limit) VMWare with Linux (on a faster 12-Core MacPro). Here’s the additional info necessary to build for 10-bit H264: http://video.stackexchange.com/questions/13164/encoding-422-in-10-bit-with-libx264.

NLE Support

Premiere Pro CC works great with 10-bit 422 H.264 files, this is the same basic spec as Sony’s XAVC (vs. XAVC-S which is 420 8-bit). Doing an A/B compare against ProRes 444 at 3x the bitrate is visually equivalent. Only when zooming in 400% can the fine noise pattern differences be seen. So far I haven’t be able to create a 10-bit 422 H.264 file that Resolve will display (shows black). I will test with FCPX on OSX shortly.

Ultimate Quality

I’m seeing macroblock edges in the ProRes 444 files from mlrawviewer. I’m curious if the more modern H.264 can produce macroblockless encodes (which can be fully deblocked when decoded). H.264 also supports ALL-I- so perhaps ALL-I H.264 at similar bitrates to ProRes 444 may provide better image quality.

H.264 10-bit 422 Support for mlrawviewer

I’ve looked at the source code for mlrawviewer.  It would be fairly straightforward to add support for high-quality H.264.

Leave a Reply