Copy link to clipboard
Copied
Hi all,
I have written a 'proof-of-concept' GPU-accelerated H264-encoder for Adobe Media Encoder (CS6). It requires an NVidia 6xx/7xx series "Kepler" GPU (CUDA capability 3.0), and uses the dedicated GPU's builtin hardware-encoder (NVENC) to offload the H264-encoding process from the host-CPU. This software is "proof-of-concept", so it's missing some critical features (no interlaced-video support, no AAC-audio or Dolby AC-3 audio), and of course, it could be buggy! But it's free.
!!!! Disclaimer: NVENC-export is third-party software that is not supported by either Adobe or NVidia. It comes with no warranty -- use at your own risk.
Software/hardware Requirements:
(1)Adobe Premiere Pro CS6 or Media Encoder CS6 (Windows version)
Sorry, MacOSX is not supported. (NVidia NVENC SDK doesn't support MacOSX.)
(1)NVidia Kepler GPU <GKxxx> with 1GB VRAM or more (GTX650 or above, GT650M or above)
(Sorry, NVidia Fermi <GFxxx> is NOT supported, it doesn't have the NVENC hardware feature)
Note,if you have MPE-acceleration enabled, keep in mind the NVENC-plugin consumes some additional VRAM because it uses your GPU to perform H264-encoding.
Strongly recommend a 2GB card
(2) Microsoft Visual C++ 2010 SP1 x64 redistributables
(download this from Microsoft's website)
Installation instructions:
In Adobe Premiere Pro CS6:
(1) On your system, locate the installation-directory for Premiere Pro CS6.
Usually, this is C:/Program Files/Adobe/Adobe Premiere Pro CS6
(2) Copy the included file Plug-ins/Common/nvenc_export.prm
to <installation dir>/Plug-ins/Common/
-> To choose the NVENC-plugin in Premiere Pro,
In the format-menu, select <NVENC_export>
In Adobe Media Encoder CS6:
(1) On your system, locate the installation-directory for Media Encoder CS6.
Usually, this is C:/Program Files/Adobe/Adobe Media Encoder CS6
(2) Copy the included file Plug-ins/Common/nvenc_export.prm
to <installation dir>/Plug-ins/Common/
-> To choose the NVENC-plugin in Media Encoder,
in the format-menu, select <NVENC_export>
Performance & quality notes:
(1) How much faster is NVENC-export than Adobe's built-in Mainconcept H264 encoder?
Depends on your PC system. On my test-system, which is ordinary desktop PC with Intel i5-3570K (4-core 3.4GHz), NVENC-plugin is roughly 4x faster than Mainconcept. On a dual-socket Xeon Ivy Bridge-E system, NVENC would probably only be 2x faster (in Media Encoder.)
(2)How does the video-quality compare?
Comparing similar settings/video-bitrate, Mainconcept performs better at lower-bitrates(less artifacts). At medium-high bitrates, NVENC is comparable to Mainconcept.
(3) How does NVENC-export encode the video?
The plugin fetches videoFrames from the Adobe application, then converts the frames from YUV420 to NV12 surface-format (using host-CPU.) Then it passes the converted frames to the NVENC front-end. From here, NVENC hardware takes over, and handles all aspects of the video compression. When NVENC hardware is done, it calls the plugin to output write the elementary bitstream (to the selected filepath.) NVENC-hardware does NOT encode audio, nor does not multiplex the A/Vbitstreams -- this is still done in software (on the host-CPU)
The NVENC hardware block has very little CPU-overhead. But since video-encoding is just 1 step in the entire Adobe rendering path, CPU-usage will likely still be quite high when using NVENC-plugin.
(4) What's the maximum-size video NVENC-export can handle?
H264 High-profile @ Level 5.1, which works out to roughly 3840x2160 @ 30fps. (Note the actual encoding-speed will probably be less than 30fps.)
(5) How fast is the NVENC-export hardware in Kepler GPU?
Assuming the Adobe application host is infinitely fast (i.e. can send video to plugin in zero-time), NVENC-hardware will encode High-profile (CABAC, 2 refframes, 1-bframe) 1920x1080p video @ ~100fps. At 3840x2160p (4k video), the hardware encode-speed drops to roughly 20-25fps. That is still faster than a desktop PC.
NVENC-speed is generally same across the Kepler family - the high-end Geforce GTX Titan (or GTX780) is no faster than the entry-level Geforce GTX650, because all Kepler models share the same NVENC hardware-block, which is totally separate and independent of the GPU's 3D-graphics engine.
In premiere Pro 6, MPE acceleration will greatly affect how quickly Adobe can render video to the exporter. So a more powerful Kepler GPU will probalby complete projects faster than a less powerful one (up to NVENC's performance ceiling.) For more info, please refer to NVidia's NVENC whitepaper at their developer website (public)
(6) I have a multi-GPU setup, can I encode with multiple GPUs?
No, NVENC targets and uses only a single physical GPU. (You can choose which one.)
Known limitations and problems:
NVENC-plugin is a 'proof-of-concept' program -- it is not a finished product. So it's missing some features, and other things are known to be broken:
no AAC or Dolby-Digital
no MPEG-4 muxing (*.MP4)
(To fix: Select a different codec, then re-select NVENC_export.)
Sorry, NVENC hardware was introduced with NVidia's Kepler family (2012) Anything older than that will NOT work with the plugin.
Copy link to clipboard
Copied
I don't know anything about that. I thought Visual C++ was a programming/coding environment. How do I tell if I have it installed?
Copy link to clipboard
Copied
I went to MSFT and downloaded the latest Visual C++ and then reinstalled the newer NVENC plugin.
The plugin now appears in Premiere and it launches MP4box, but a popup says "mp4box.exe has stopped working" and the underlying window shows an error "possible variable frame rate... fixed frame rate flag absent"
??
Copy link to clipboard
Copied
So, I followed the video and got this using Premiere CS6...
Specs:
i7-2600
GTX 970
32gb RAM
Any clue?
Copy link to clipboard
Copied
to DalenKX:
I got similar error for timeline with black screen at the begining. If black video to replace with empty space no error.
Copy link to clipboard
Copied
What do you mean? Do you mean a black screen in general? I have a title sequence that has a black background...
Copy link to clipboard
Copied
I mean when I render a video clip. No black screen, just a clip of an orchestra. It renders the video and then the Nero AAC renders the audio, and then MP4box starts and I get a crash report for it. I don't have variable frame rate selected, but MP4box thinks I do and can't process the file.
Copy link to clipboard
Copied
Try set NV_ENC_PRESET to NV_ENC_PRESET_BD_GUID
and MP4box from gpac-0.5.2-DEV-rev58-ge59cb02-master-x64.exe is working for me.
Copy link to clipboard
Copied
BINGO! It works! And the quality is surprisingly good with an avg br of only around 5mbs. In fact, it looks almost indistinguishable from 35mbs. This will be very usable for banging out quick 1080P Youtube videos, being it's 7X faster than using AME. Thanks for that hint!
Copy link to clipboard
Copied
I do notice one problem though.. if there is black video, such as a fade to black for a few seconds, that black is reduced to a single frame in duration in the output file, throwing the video and audio out of synch from that point forward.
Copy link to clipboard
Copied
Is it 7 times faster before or after mp4box?
Copy link to clipboard
Copied
Either way. MP4Box takes about 1/2 second to do its thing at the end of the rendering. I see a command box open and close. Happens so fast I could miss it if I blink.
Copy link to clipboard
Copied
Thank you for reply. Here in a 10min fullHDvideo, mp4box takes 3min, it is happening only with me?
Copy link to clipboard
Copied
You're probably using a mechanical hard drive to store the files, right? I'm using an SSD. The difference between 50MB/s and 535MB/s can be pretty dramatic.
Copy link to clipboard
Copied
The big problem is this, mp4 box read and write on same drive.. It slow down the process. I'm using a laptop, so only 1tb option is a hybrid ssd, but i will try with a usb3.0 external ssd. Maybe this go better.. The logical solution would be if mp4box read from one HD and write on another...
Copy link to clipboard
Copied
When you need fast read/write times, avoid any device with the letters "USB" in it. Get a good fast internal SSD and work in that space. It makes a huge difference in MUXing, which is disc intensive.
Copy link to clipboard
Copied
Ok, im sorry but i feel really dumb.. Now i installed nvenc on another PC (gtx970) but multiplexing MP4 doesn't apper mp4box change path option, when i hit OK it says: MP4BOX path is invalid: C:\TEMP\MEGUI\TOOLS\MP4BOX\MP4BOX.EXE
What i did wrong?
Copy link to clipboard
Copied
Greetings, i have tested this preset and i love it! It uses 80-100% of Gpu when it used 0-30%
But it is useful when u use ONLY GPU ACCELERATED EFFECTS.
If i use an effect like the Noise Reduction or from the Magic Bullet Suite, Mojo or Denoiser for exaple, this preset does not work at all!
I can encode, but the GPU is at 0% and it takes the same time as the h264 premiere's preset and the CPU is at 100% as usual
I love the idea to encode with the combination of GPU and the CPU, because as it is now, if u encode a timeline that has effects that do not support GPU Acceleration you must use only the CPU.
Copy link to clipboard
Copied
Hi, mp4box worked first time, but now it is stopping working, it says: Possible Variable Frame Rate: VUI "fixed_frame_rate_flag" absent.MP4box seems not work with codec anymore. Anyone with same problem?
Copy link to clipboard
Copied
Fury3D написал(а):
Hi, mp4box worked first time, but now it is stopping working, it says: Possible Variable Frame Rate: VUI "fixed_frame_rate_flag" absent.MP4box seems not work with codec anymore. Anyone with same problem?
Copy link to clipboard
Copied
Thank you, now it works. I think mp4box slowly very much render times.. The video render time was same time as mp4box process.. Mp4box double rendertimes 😕 In this case Intel Quick Sync won, it was 25% faster.
Copy link to clipboard
Copied
I'm doing some testing of the quality of NVENC with various types of footage. At 35mbps, it actually has fewer artifacts than AME does at 30mbps. The output files for a 1 minute test sequence were 211MB and 247MB for AME and NVENC respectively.
The NVENC has some bands of block artifacts in areas of blue skies, but then so does AME. In fact, in one shot the AME rendered sky had some rather distracting and pronounced bands, whereas the NVENC version was more random and less noticed.
Of particular note was the vastly reduced mosquito noise in the NVENC version. Edges of roofs in a downtown scene rendered with few or no visible noise in the abutting sky colors. The AME encode has very obvious random clumps of pixels following the edges of rooftops as that camera pans slowly.
So it's a wash. In some ways NVENC looks better. In others, AME may have a slight edge. But above 30mbps, they both look decent. Of course, I only could view the results in Encore's preview function, by choosing the video chapter and selected 'preview from here' with quality setting at 'high'. My Oppo BDP83 might do a better deblocking job and it might look even better there, especially projected by DLP onto a screen. But this is very encouraging. 2-pass rendering for NVENC is about 2x faster than realtime, and 2-pass AME is about 3.5 times slower than realtime. That's a 7:1 difference in rendering times for similar results.
Copy link to clipboard
Copied
But when MP4box starts do it slow down the time of your render? Here in 30min video mp4box slow down all the process.. So here with mp4box the whole process is more slower than Intel QuickSync.
Copy link to clipboard
Copied
The render is done before MP4box starts. The render goes about 3X realtime speed for 1920x1080. The problem is MP4box generates a crash report and never MUXes the streams.
Copy link to clipboard
Copied
WORKAROUND FOR THE STILL FRAME LOSS OF SYNCH
I've been experimenting with how to solve the synch problem where black screen (or any still frame image) gets only one frame encoded, no matter how many frames in length on the sequence.
First, I tried video, with the transparency set to 0. That worked properly. So that made me think, timecode is present and the encoder needs that to keep things in synch.
So I tried bars and tone and applied "Motion" and set a few keyframes to scale it up and down. That encoded without any time slippage.
Finally, I realized that all I need to do is create ONE keyframe at the beginning of the still frame's Motion effect. No need to actually scale or move. That apparently forces Premiere to generate timecode during the export.
So the way to have still frames and not lose picture/audio synch is to enable motion keyframe.
Copy link to clipboard
Copied
Just found a critical problem with the h.264 files encoded by NVENC: Encore CS6 chokes on them. More specifically, Encore won't author them to the disc unmolested.
It INSISTS on transcoding the NVENC encoded files. It leaves the AME encoded h.264 files alone and those show up on the BDMV as AVC, but every NVENC encoded file shows as MPEG2 on the BDMV disc. I noticed something was wrong when Encode was taking forever to author just a few minutes of video test clips. The status shows "transcoding" and the files.
This, despite the master settings being 'h.264'. The AME files show up as 'don't transcode' in the Project Blu-ray Transcode Settings, but the NVENC files show as 'automatic'. Worse still, I cannot select 'don't transcode' if I right click on them. I tried setting them to automatic h.264, but Encore still recompresses them into MPEG2 files.
So for BD authoring, this isn't going to fly. The gains in rendering speed out of Premiere are completely lost in having to re render them and compress them into a less efficient CODEC, and the quality loss kills the deal.