Decoding ProRes 4444 XQ on Windows

ProRes XQ (or ProRes 4444 XQ) was released in June 2014 as an expansion to the already very robust ProRes 4444. The new codec kept all the standard 4444 features post and VFX work have come to love (lossless 12 bit color and 16 bit with alpha), but has expanded the data rate to a staggering 396 MB/s at 1080p24 (vs 264 MB/s with 4444). This increased bandwidth gives the codec an advantage over conventional 4444 when working with expanded and high dynamic range cameras as well as better preserving data through the post process.

Recently, I colored Purity Ring's Begin Again by Young Replicant (a great video that you need to check out). The project was shot on anamorphic (Hawk 2x) Alexa 2K (2048*1536) or (4096*1536 when desqueezed) recorded via ProRes XQ (which the Alexa can now record natively).

I run Resolve on Windows and had yet to encounter anyone using XQ since it had been introduced. When the codec was announced, I read through the white paper and other media available on it and at the time it seemed like the only thing Apple had changed between the venerable 4444 and the new 4444 XQ was the increase it bitrate. This should have meant no new encoding tricks or techniques which would make the format incompatible with NLE's or even entire operating systems. How wrong I was.

It turns out that ProRes 4444 XQ is incompatible with Windows (and Linux) and Apple has never bothered updating Quicktime for these platforms to fix this issue. Great. I had a deadline fast approaching and I wasn't looking forward to borrowing a mac to transcode tons of enormous XQ footage to more manageable 4444. I poked around the internet a bit and found lots of people looking for fixes and coming up empty. One promising lead appeared, however, in a user of a forum who said that they had a script that just changed a few internal characters and made the footage compatible - no rendering required! Unfortunately, I couldn't get in contact with this individual, but the tip set me in the right direction to get XQ playing correctly on Windows.

FourCC

FourCC (or four-character code) is a code that uniquely identifies what encoding specifications are used on a video. This helps software determine how to correctly decode that file even if it may share the same file extension as another codec. For example, .mov files could be SVQ3, SV10, RPZA, ap4x (yes, these are case sensitive), etc even though they all look like the same generic .mov from the outside.

When apple introduced ProRes 4444 XQ, they changed the fourCC code from ap4h to ap4x even though the actual decoder did not change. This change means that decoders that work with ProRes will think they are incompatible with ProRes XQ even though they're very capable of playing it back if it was labeled with a ap4h fourCC. QuickTime on OSX (and the many NLE's and other pieces of software that depend on it) has had its fourCC decoder lists updated while PC QuickTime (and the many NLE's and other pieces of software that depend on it) have not.

Fortunately, there's a (relatively) easy fix.

The Fix

If you're looking for something dead simple and effective, check out FourCCchange ($24.95). The program (for which a demo version is available) finds files with a FourCC of ap4x (your ProRes XQ files) and changes only them to ap4h (which will decode on Windows perfectly) without affecting anything else. It gives you the option of backing up files or simply making the change live. If you choose the later option, the whole operation only takes a few seconds.

The way this software works is by editing the binary values of the file(s) and replacing every hex instance of ap4x with ap4h (for which only one instance should exist in each file). For those of you who are more tech savvy, you can do this manually (or in batch) using your own preferred hex editor. Simply open the file, search for the ap4x string (capitalization matters), replace it with ap4h, and save the file. The new file should play perfectly well in DaVinci Resolve, Premiere Pro, or whatever NLE you need.

For the ffmpeg jockeys out there, there's a simple command to force a new fourCC onto a file: ffmpeg -i <inputFile> -vcodec copy -acodec copy -vtag ap4h output_FOURCC_XXXX.mov. The key value here is the -vtag variable which forces a new fourCC onto a video file while the -acodec copy -vcodec copy ensures that the actual audio and video stream aren't adjusted in any way.

You can take this and add it to a batch file to process an entire folder (and subfolders) at once. Here's an example code below that lets you input any fourCC code for any file extension:

@echo off
echo Change FourCC
echo *********************
echo.
set /p fourcc= Desired FourCC (case sensitive) :
set /p ext= For all files of this extension (example: mov) :
for /r %%X in (*.%ext%) do (
ffmpeg -i "%%X" -vcodec copy -acodec copy -vtag %fourcc% "%%X.%ext%"
)
pause

For this batch file to work, you'll need to download a static build of ffmpeg and extract it to C:/Windows/System32 (don't worry about any warnings that pop up, we're just adding files so it won't be a problem). Next, copy the contents of this file into a notepad and save it as something like fourcc.bat - the .bat extension being the key. Drop this .bat in the folder with the .mov's (or whatever) you'd like to convert and the run it. To convert ProRes XQ to play correctly, you'll want to input ap4h as your desired FourCC and mov as the desired extension.

And there you go! Three different ways to enable ProRes XQ to play back on Windows. Until Apple updates the Windows QT decoder and/or NLE writers figure out a workaround, this is what you'll have to do in order to use this robust codec outside of OSX.