NVidia GPU-accelerated H264-encoder plugin, ready for public testing

Guest
Jun 27, 2013 Jun 27, 2013

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:

    • Interlaced video encdoing does not work at all (not supported in current consumer Geforce drivers)

    • Audio support is very limited: uncompressed PCM)

no AAC or Dolby-Digital

    • Multiplexer support is very limited: MPEG-2 TS only, using an included third-party tool TSMuxer.EXE

no MPEG-4 muxing (*.MP4)

    • When the muxed MPEG-2 TS file in Windows Media Player (WMP), there is no sound.  This is because WMP doesn't recognize PCM-audio in mpeg-2 ts files.  You have 2 choices; you can use a third-party media-player such as MPC-HC or VLC.  Or you can postprocess the audio-WAV file into a compatible format (Dolby Digital/AC-3)

    • in the pop-up plugin User-interface, the <multiplexer> tab is missing or not shown properly.

(To fix: Select a different codec, then re-select NVENC_export.)

    • Doesn't support older NVidia GPUs (GTX5xx and older, GT630 and lower)

Sorry, NVENC hardware was introduced with NVidia's Kepler family (2012)  Anything older than that will NOT work with the plugin.

TOPICS
Hardware or GPU

Views

347.7K

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
replies 421 Replies 421
New Here ,
Jun 13, 2014 Jun 13, 2014

Copy link to clipboard

Copied

A little late with this post;
To explain why your CPU is still being used 100% (or near there), it is because audio is not GPU-accelerated and is being done by the CPU. Also, some of the data still has to be processed by the CPU- the GPU is only accelerating the process through the NVENC block on your GPU; this block is actually a very small portion of your GPU and does not relate to 3D rendering, and thus your GPU reports that it is using a very small amount of its total power.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
May 27, 2014 May 27, 2014

Copy link to clipboard

Copied

Thank you for taking the time to develop this encoder.  I followed all the directions and the videos you put up on YouTube, but somehow when I export a video from Premiere to AME and go through all the settings it only wants to export it as an AAC.  Once in AME if I click on the file that's in line to be encoded to try to change the settings the "Export Video" option isn't there and the NVENC_export format is not there.  It is there in Premiere but not AME.  I did put the nvenc plugin in the Premiere/Plugins/Common folder and also the same plugin in the MediaEncoder/Plugins/Common folder too but somehow it's not working.  so no matter what I do if I export a video it always just gives me the AAC.  I've also tried both MP4 and TSmuxer but the results are the same.

What am I doing wrong?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
May 27, 2014 May 27, 2014

Copy link to clipboard

Copied

BTW I have a Quad-core 920 with a Nvidia GeForce GTX 660 Ti

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
May 30, 2014 May 30, 2014

Copy link to clipboard

Copied

For any of you with questions try this video:

It's a bit shorter than the installation tutorial so i thought it might be useful.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
May 30, 2014 May 30, 2014

Copy link to clipboard

Copied

Ok, followed the video and listened to the instructions, reinstalled GPAC and videos come out fine and lightning fast (though only through premiere pro). However, i cannot change the resolution even by a single pixel in either direction or it throws up an error.  Why is this?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
May 31, 2014 May 31, 2014

Copy link to clipboard

Copied

Known problems:

(Same limitations as previous versions.)

(1) If MPE hardware-acceleration (CUDA) is enabled in Premiere Pro or Media Encoder, then nvenc_export cannot resize the source-video to a different output-size.  You must make sure the source-video size and output-video size are the same, otherwise the video-encode will fail.  (Alternatively, turn off MPE hardware-acceleration.) I suspect this is caused by Adobe's hardware MPE-renderer not supporting resize-operations on the PrPixelFormat_YUV_420_* surfaceformat, which is requested by nvenc_export.

Question already been answered. As the tutorial says read the page.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
May 31, 2014 May 31, 2014

Copy link to clipboard

Copied

Figures. The one paragraph I did skip over did have the answer. Sorry about that.  I wonder if it's worth googling to find a way to either work around this road bump or getting a plugin that would allow Adobe to support resize operations with all this stuff enabled...

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 14, 2014 Jun 14, 2014

Copy link to clipboard

Copied

What version of MP4Box are you using? What files did you pull out of the install folder to get it to work?

The reason why I ask is because the files that I've been exporting are being deleted instantly after Nero does the AAC rendering.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guest
Sep 03, 2014 Sep 03, 2014

Copy link to clipboard

Copied

Hi,

I use Adobe Media Encoder and I was try install NVENC plugin to media encoder by this video tutorial.

I have some questions now. My media encoder detect NVENC_export plugin correctly but I wanna ask you:

1. How I can encode to MP4 container with Media Encoder? I know that I probably need install gpac. So I do it but what next?

2. How I can encode audio  to AAC? I know that I probably need download Nero AAC codec. So I do it but what next?

3. How I can set up my custom CBR rate for video and for audio?ä

4. How I can set up my custom video resolution?

Problem is that I found video tutorials only for install this plugin to Adobe Premiere Elements.

Thanks for answers.

Sorry for my not very well english.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 29, 2014 Jun 29, 2014

Copy link to clipboard

Copied

Need some help everything was working like it should but I started getting a error and mp4box stop working no mater what I do I download the dev mp4box and that did work I just don't know what to do I'm not using v106 i'm using v107

adobe premiere elements 12 64bit

mp4box.jpg

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 05, 2014 Jul 05, 2014

Copy link to clipboard

Copied

Thanks so much for making this. I'm using PP & AME CC 2014, with an i7-2600K CPU and a Nvidia GeForce 660 Ti video card.

When using MainConcept, spitting out a 50mbps H.264 encode, I get a ten-minute video rendered thus:

  • Using software/CPU only: 45 minutes (all CPU cores working 100%, negligible GPU usage)
  • Using CUDA engine: 20 minutes (~60% CPU usage, and around 15% GPU usage)
  • Using nvenc_export + software/CPU mode: ~45 minutes (same as just with MainConcept). I guess this means in this instance, PP cannot feed the renderer fast enough.
  • Using nvenc_export + CUDA - cannot render -- I get the message about not being able to scale, and tells me to export to 1920x1080, but this already *is* the resolution of the source footage and Premiere sequences, so I don't know what I can do here. Any help? I have a feeling this might really speed things up beyond the 20 minutes CUDA alone takes.

Thanks!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 28, 2014 Jul 28, 2014

Copy link to clipboard

Copied

Hi! Thank you for the program. Version 1.01 works good, 1.02 too. But starting from 1.03 till 1.07 there is NO NVENC_export at the Export setting. Can you help me? Thank you.

Premiere CS6.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Aug 26, 2014 Aug 26, 2014

Copy link to clipboard

Copied

Dear Sir,

it function also with premiere pro cc 2014?

Thanks for your efforts

Ale

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Nov 02, 2014 Nov 02, 2014

Copy link to clipboard

Copied

This would be awesome for Macusers too.

Is there any Alternative we Macusers can use?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 04, 2014 Nov 04, 2014

Copy link to clipboard

Copied

Maybe someone knows if there is a way to enable Maximum Bit Depth (or 32bpc color) and use this plugin for export?

I'm using Neat Video plugin, and it creates nice gradients in areas where previously was blocky noise.

When i render with default Adobe's H264 exporter (MainConcept) and i enable Maximum Bit Depth in the exporter window,

these gradients remain well preserved.

In NVENC it seems like impossible to let Premiere render effects in 32bpc (i don't see any checkbox),

Maximum Bit Depth checkbox in composition is just ignored during any export anyway.

The encoding result is horrible - gradients produced by NeatVideo in 8bpc are very jagged and ugly.

So i still have to use MainConcept encoder if effects require 32bpc rendering

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Nov 15, 2014 Nov 15, 2014

Copy link to clipboard

Copied

I select 23.976fps, AME say 23.98 fps. after encoding 1H of video, the resulting video is set to 23.976. if I multiplex it

with the audio that I exported manually from premiere (project is of course 23.976), it is out of sync at the end.

so, I suspect it is working at 23.98 instead of 23.976

notes:

- if I use the latest MP4Box it fail silently (and erase the resulting files m4v and .m4a). maybe they changed their command line parameters ?

- NeroAACEnc on the other hand is properly launched and encoding is fine.

it seems that below 15mbps, let say 4Mbps, the result is blocky and hugly no matter I change settings. especially in fade in/out. As all hardware encoders,

good quality with low bitrate seems impossible.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Dec 08, 2014 Dec 08, 2014

Copy link to clipboard

Copied

I would like to confirm what droopy6 said, the finishing part in the encoding process fails and all files are just deleted. I tried with default settings and the source material was some HDV (.mpeg). The encoding is lightning fast but I can't get it to work. Is there anything to try? Also, is this same functionality available for Premiere somewhere else, free or paid?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 31, 2014 Dec 31, 2014

Copy link to clipboard

Copied

If you have problem with mp4box you can use this build nvenc_export.zip - Google Drive

Problem was that one of parameters (-tmp value) passed to mp4box exectuble did not enclosed with double quotes.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 03, 2015 Jan 03, 2015

Copy link to clipboard

Copied

After strictly and carefully follow your steps on youtube video, what i got is an "Assertion failed" (probably from visual studio)

I got everything installed (VS update4, MP4, neroaac, and your plugin -at latest release.

Please help me.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 03, 2015 Jan 03, 2015

Copy link to clipboard

Copied

Try reinstall your stuff or windows complete. I had fresh installation with visual studio, few nvidia skds, directx, and few games from steam (they installed some deps). After that i installed adobe premiere with this plugin and all goes well.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 05, 2015 Jan 05, 2015

Copy link to clipboard

Copied

Is it just me or is rendering 1920x1080p @ 60fps causing the following error for anyone else?

http://puu.sh/e85QB.png

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 27, 2015 Feb 27, 2015

Copy link to clipboard

Copied

I get the exact error, only when trying to export @60fps - it has been working beautifully for me @30fps
Is anyone using this and getting 60fps to work yet?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 27, 2015 Feb 27, 2015

Copy link to clipboard

Copied

I found my issue, I just had to select level 5.1

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 28, 2015 Feb 28, 2015

Copy link to clipboard

Copied

Hey all,

I just discovered this today and was excited to try and get it to work; I can finally be able to use my GTX 970 to render video faster! However, when trying to render a 10 minute video, at 1080p60, using levels 4.1, 4.2, and 5.1, as an MP4 file, I get a weird error.

c579f072797a1fa9f11c760c876b96c5.png

Anyone know the issue for this?

I'm on Premiere Pro CS6, by the way.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Mar 01, 2015 Mar 01, 2015

Copy link to clipboard

Copied

Have you installed the proper version of "Visual C++ Redistributable for Visual Studio 2013 Update 4" ?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines