When you compress video for on-demand streaming, you primarily care about three things; quality, quality and… let’s see, oh yes, quality. If you’re been encoding H.264 video with Apple Compressor using the codec that Apple provides, you definitely haven’t been optimizing the quality of your video. In this tutorial, you’ll learn how to install and use the x264 codec within Apple Compressor, which will improve the quality of your encoded video, particularly at lower data rates.
Note that this tutorial will focus exclusively on using the x264 codec within Compressor; it’s not a comprehensive tutorial on how to use Compressor to produce H.264 files. For an overview of using Compressor, check out this video tutorial “Producing H.264 files for Flash distribution with Apple Compressor.” It’s not directly on point, in that it covers using the Apple codec, not x264, but it will provide an overview of Compressor’s encoding workflow. For an overview on H.264, check out the tutorial “Understanding the Key H.264 Encoding Parameters.”
About H.264: What It Is, Why You Should Use It
Let’s start with some background. H.264 is a video standard adopted by multiple standards organizations, and there are multiple H.264-compliant codecs available on the market, including Apple’s, x264, and others. Significantly, x264 is an open source and free option that’s been rated as the highest quality H.264 codec for the last few years in the highly-regarded codec comparison published annually by Moscow University.
In contrast, the Apple codec lacks critical features like support for the High profile or CABAC entropy coding, and produces much lower quality than x264, though the difference is most noticeable at aggressive encoding parameters. For example, Figure 1 shows how the x264 codec compares to Apple’s when encoding my standard 720p test file to 800kbps. To be clear, I produced both in Compressor, the file on the right using the Apple codec and the file on the left using the x264 codec.
As you can see, the Apple codec looks faded and preserves much less detail. Figure 2 shows a similar comparison when encoding an SD file to 640×480 resolution at 468kbps. Again, in this high motion shot the Apple codec looks faded and preserves much less detail.
Of course, the quality differential will vary according to the source content and the encoding parameters that you use. For example, Apple encodes some of the marketing videos shown on its website at 848×480 resolution with a video data rate of 1.9Mbps, which is quite high. At these parameters, any H.264 codec will look great. However, if you’re seeking the best possible quality at the lowest possible bitrate, x264 is a much better option than the Apple codec.
In addition, beyond the quality issue, Compressor provides no control over common H.264 encoding parameters like B-frame interval or even the direct ability to choose the H.264 profile used in the file. You get all this and more with the x264 component discussed below.
Downloading and Installing the x264 Component
There are multiple QuickTime components available; the one I recommend is from a site called MyCometG3, which was run by Japanese developer Takashi Mochizuki. Note that Mochizuki discontinued additional development on the component at the end of 2011, so the code is frozen as of that date. This means that as the x264 development community advances the codec further, you won’t get the benefits of these advances.
That being said, the existing download available at MyCometG3 is current as of 12/30/2011. As far as I know, this is the most advanced x264-based implementation available that you can operate in Compressor. I used this update to encode the x264 files shown in the figures above, so obviously this component produces much higher quality than the Apple codec.
When you click the download link on MyCometG3, you’ll download a DMG file that you can double-click to open. Within the contents you’ll find a file named x264Encoder.component. Copy that into your Library/QuickTime folder, and the next time you run Compressor (or QuickTime for that matter) the x264 codec will be available as shown below. Though you probably won’t need it, here’s a video showing you where to copy the file.
Using the x264Encoder
To use the x264Encoder within Compressor, you can change the codec in an existing preset or create a new preset; I’ll show the latter technique. In Compressor’s Settings window, click the Create a New Setting list box and choose QuickTime Movie, which opens a new setting in the Inspector window.
In the Inspector window, name the setting something memorable. I usually include both the codec and the target output. Then, click the Video button to open the Standard Video Compression Settings dialog. Click the Compression Type list box and choose the x264Encoder.
Next, click the Options button to open the libavcodec settings dialog. While the settings are very comprehensive, there are only one or two that you need to adjust, which I’ll come back to in a moment. First, click Load preset on the bottom left to load an encoding preset.
Briefly, the developers of x264 created the ten presets shown in Figure 6 to enable x264 users to simply and easily balance encoding time against quality. You’ll see the same presets whether you access x264 via plug-ins like x264Encoder, free programs like Handbreak, or professional encoding tools that offer x264 encoding like Sorenson Squeeze or Telestream Episode. As with these tools, when you choose a preset, the x264Encoder applies a certain set of parameters which you can later customize. If you’re interested, here’s a complete breakdown of the encoding parameters used in each preset and some performance (but not quality) comparisons.
I produced the file comparisons shown in Figures 1 and 2 using Medium preset, which is the default preset, and one that I find represents the best balance of encoding speed and quality. Note that if you choose slower presets you increase the risk of creating files that may not play on your target platforms.
As an example, if you encode using the Slower preset, the encoder uses 8 reference frames. If you scan through the readme file included with the x264Encoder download, you’ll note that files with over 6 reference frames may not play in older versions of QuickTime. To avoid potential problems like these, it’s best to use the Medium preset unless you’re certain that you can correct any potential problems before encoding.
In addition to choosing a preset, you can also choose an x264 tuning option as shown in Figure 7. On its website, Zencoder, a cloud encoding facility that uses the x264 encoder, explains the tuning options as follows:
- Film: optimized for most non-animated video content (not only feature films)
- Animation: optimized for animation. Note that most 3D animation behaves more like film and not like hand-drawn animation, so only use this for hand-drawn animation (anime, classic Disney, etc.)
- Grain: optimized for film with high levels of grain
- PSNR: uses “peak signal-to-noise ratio” to optimize video quality
- SSIM: uses “structural similarity” to optimize video quality
- Fastdecode: reduces encoding complexity to allow for easier decoding
- Zerolatency: x264 will keep an internal buffer of frames to improve quality; this setting removes that buffer, but reduces quality
In general, if your video falls in one of the first three categories, or is a Touhou game, you should apply the fine-tuning option. Otherwise, I’d recommend you choose None.
Once you choose your preset and tuning option, click OK to close that dialog and return to the Libavcodec settings screen shown in Figure 5 (and again in Figure 8, below, for convenience. Here’s where you can customize one or two specific parameters for your target playback platforms. For example, if encoding for older mobile devices, you should limit the H.264 profile to the Baseline profile. Unless you absolutely know what you’re doing, I would leave all other parameters at those selected by your preset.
When you’re done, click OK to return to the Standard Video Compression Settings screen. In general, you can configure these and all other Compressor settings as you have in the past.
Any time you change codecs or encoding parameters, there’s a potential compatibility risk. Remember, however, that since YouTube, Zencoder, Sorenson, Telestream, and many other companies use the x264 codec, there’s nothing inherently wrong with the codec; if there is a problem, it almost certainly relates to your settings. You can minimize the impact of any incompatibility by testing the first few files that you encode on all relevant target platforms.
Note that potential incompatibilities are most likely on devices that have the least tolerance for out-of-spec video encoding. Test tablets and other mobile devices first.