October, 2010 Archives
A lot of people are talking about CUDA and OpenCL on the GPU in the context of Premiere Pro. But the talk is almost always about speed, speed, and more speed. Yeah, using CUDA or OpenCL on the GPU to process a lot of effects and such does speed things up (a lot!) in many cases, but that’s not the whole story.
Moving a lot of processing to the GPU can also make things better, not just faster.
A good example is scaling. There are lots of different scaling algorithms, and they each have their pros and cons. Some are better for scaling things up, some are better for scaling things down; some are better for sharp graphics, and some are better for gradual changes in color across an image. The real tradeoff, though, is that the high-quality algorithms are also—in general—the slow algorithms.
However, these higher-quality algorithms are only really slow if you are forced to execute them serially, but they are relatively fast when you can run them in parallel. One of the huge advantages of GPU processing is that GPUs are massively parallel, with hundreds of parallel processing units. There are a lot of pixel operations that are very amenable to parallel processing, since you don’t need to know the result of the operation on one pixel to do the same operation on its neighbor in the same image. Scaling is just such an operation. When you move scaling operations to the GPU, you get to take advantage of scaling algorithms that were just plain unfeasible on the CPU.
So, scaling using CUDA or OpenCL can be better. And faster. In some tests done here, scaling was more than 40 times faster on the GPU than on the CPU at maximum quality.
When Premiere Pro is just using the CPU for the processing of scaling operations, it uses the following scaling methods:
- playback: bilinear
- paused: Gaussian low-pass sampled with bilinear
- high-quality export (Maximum Render Quality off): Gaussian low-pass sampled with bilinear
- Maximum Render Quality export: variable-radius bicubic
The variable-radius bicubic scaling done on the CPU is very similar to the standard bicubic mode in Photoshop, though the Premiere Pro version is multi-threaded and optimized with some SSE instructions. Even with these optimizations, it is still extremely slow. For high-quality scaling at faster-than-real-time processing, you need to use the GPU.
When Premiere Pro is using CUDA or OpenCL on the GPU to accelerate the processing of scaling operations, it uses the following scaling methods:
- playback: bilinear
- paused: Lanczos 2 low-pass sampled with bicubic
- export: Lanczos 2 low-pass sampled with bicubic
For export, scaling with CUDA or OpenCL is always at maximum quality, regardless of quality settings. (This only applies to scaling done on the GPU.) Maximum Render Quality can still make a difference with GPU-accelerated exports for any parts of the render that are processed on the CPU. Over time, we are working on reducing the list of exceptions to what can be processed on the GPU. For an example of a limitation that can cause some rendering to fall back to the CPU, see this article: “Maxium dimensions in Premiere Pro CS5”.
When rendering is done on the CPU with Maximum Render Quality enabled, processing is done in a linear color space (i.e., gamma = 1.0) at 32 bits per channel (bpc), which results in more realistic results, finer gradations in color, and better results for midtones. GPU-accelerated processing is always performed in a 32-bpc linear color space. To have results match between CPU rendering and GPU rendering, enable Maximum Render Quality.
Note: There are two places to enable or disable Maxium Render Quality—in the sequence settings and in the export settings. The sequence setting only applies to preview renders; the export setting (which defaults to the sequence setting) overrides the sequence setting.
One final note, as long as I have your attention:
I’ve noticed a lot of people—the vast majority, really—using the term ‘Mercury’ or ‘Mercury playback engine’ as if it refers specifically to GPU processing. Not true. The term ‘Mercury playback engine’ refers to a whole set of performance improvements in Premiere Pro, including the port to a 64-bit application, the multi-threaded nature of the application, and the use of CUDA and OpenCL on the GPU to accelerate some things. Anyone using Premiere Pro CS5 or later is getting all but one of these advantages; people with GPUs that meet the requirements are getting one additional advantage.
In a recent forum thread, someone said that they hadn’t seen much about what’s new and changed in Adobe Media Encoder (AME) CS5. So, let’s fix that.
Adobe Media Encoder CS5 now comes in a 32-bit version and a 64-bit version. The version that works with Premiere Pro and After Effects is the 64-bit version. (You don’t need to manually choose which one to use. This is taken care of automatically.) A 64-bit application can address more memory, which gives it the ability to work with larger frames and tends to make the application more stable.
export settings that automatically match sequence settings in Premiere Pro
Choose Match Sequence Settings when exporting from Premiere Pro. See “Workflow and overview for exporting”.
Similarly, when you choose a format, AME CS5 will in many cases automatically select the most appropriate encoding preset for that format based on characteristics of the source item. See “Encoding presets”.
much better controls for cropping and trimming before encoding
You can crop and trim the portion of the item to be encoded much more easily. One such improvement is the ability to select the work area (as defined in Premiere Pro or After Effects) as the area to be encoded and exported. See “Crop and trim source before encoding”.
As with After Effects and Premiere Pro, AME now has an Interpret Footage command, so you can correct settings for input files if the application guesses wrong. See “Interpret items in the encoding queue”.
new export formats, including AVC-Intra
See “File formats supported for export”.
added preferences for managing the media cache database
See “The media cache database”.
preserving source timecode on output
AME CS5 honors timecode information in a source file. If the source starts from 00:00:05:00, then the timeline for the item in Adobe Media Encoder also starts from 00:00:05:00, and not from zero. This timecode information is included in the encoded output file.
improvements to XMP metadata workflow (including metadata thinning)
Among other improvements, you can choose what XMP metadata to pass through into the encoded output file. See “Export and thin XMP metadata”.
cue points for F4V files in data track
Previously, cue points for F4V files were only stored in an XML file. Now they can be embedded in the data track of the F4V file. See “Cue points for FLV and F4V video files”.
lots of little user interface tweaks to make things easier to find and use
Some things were moved out of hard-to-find menus and into the main UI area. Some things were renamed to make them more clear. Et cetera.
BTW, you should also install the Adobe Media Encoder CS5 (5.0.1) update. Instructions for doing so are on this page.
The Premiere Pro team is using Twitter and Facebook to give and receive information about Premiere Pro.
The team Premiere Pro Twitter account goes by the name adobepremiere. Follow us.
Our Adobe Premiere Pro Facebook page has been active for a while now. Become a fan. Or friend. Or like us. Or whatever that’s called.
These are both team accounts, so you’ll be seeing things from me, from the software engineers, from the quality engineers, and so on.
We still use our blogs as a way to communicate things that we don’t want evaporating into the ether, the way that things on Facebook and Twitter seem to do so quickly. But the Twitter and Facebook channels are great ways to keep up with a (somewhat) steady stream of news and views.
So, please subscribe to this blog.
We also really appreciate feature requests and bug reports.
If you have technical questions or need some help, the best way to ask is through the Premiere Pro forum. Several video editing professionals help people on that forum. The Premiere Pro team monitors that forum, too, so we can help you to get an answer there. When asking such a question, please supply information about the version number of your software, some details about your computer, et cetera.
Jason Levine has a series of video tutorials on Adobe TV that show how to shoot and edit HD video from DSLR cameras using Premiere Pro and other applications in Creative Suite Production Premium. These videos are aimed at photographers and other folks who are somewhat new to video editing, so this series serves as a pretty good overview of Premiere Pro in general.
These videos are collected on this page, which will accumulate more videos as Jason and others create new videos in this series.
(You can find even more information about DSLR/HDSLR video workflows using Premiere Pro using this Premiere Pro Community Help search.)
Jason’s videos are a whirlwind tour, covering a lot of material very quickly. I figured that some viewers might need links to additional information to fully understand everything that Jason was trying to communicate.
Here’s a rough breakdown of the subjects covered in each video, with some links to additional resources on each subject.
- getting photos from camera with Adobe Bridge
- creating and setting up a project
- creating a sequence and choosing a sequence preset
- importing files with the Media Browser
- other methods for importing files
- previewing a sequence
- setting playback and pause resolution in Source Monitor and Program Monitor
- importing still images
- setting default duration for imported still images
- extending a clip
- ripple insert edits
- ripple delete edits
- basics of keyframes
- “easing” keyframe animation by modifying keyframe interploation
- animating Motion effect to scale and position a clip
- copying and reusing keyframes
- importing Photoshop files
- using Edit Original to modify PSD file in Photoshop
- scale clip to frame size
- adjusting opacity