Posts by Vouk

    Status update:


    When getting yuv420 out of DVR and feeding it directly into NVENC (without conversion from uyvy422) I get a performance increase of 62%. Really nice.


    Code
    Exported 1919 frames in 4 seconds. (avg. 393.96 fps) [YUV420p->YUV420p]
    Exported 1919 frames in 7 seconds. (avg. 242.30 fps) [UYVY422->YUV420p]
    Exported 1919 frames in 12 seconds. (avg. 152.90 fps) [YUV444p->YUV420p]


    With these low latencies (2538 us/frame) small changes might have a huge effect.


    TO DO

    • Add high bit depth mode pixel formats
    • Get alpha channel working
    • Get timecodes working for MOV
    • Native DVR NVENC fails after Voukoder ran
      "NVENC m_EncodeAPI.nvEncOpenEncodeSessionEx(&encodeSessionExParams, &m_pEncodeSession) return: 15"

    The only thing, when I inspect video properties, it says the color space is unknown. I believe this is what smirontsev was referring to.


    This should be fixed in version 0.2.0 now. It is available in the regular voukoder download section.


    Code
    Color range : Full
    Color primaries : BT.709
    Transfer characteristics : BT.709
    Matrix coefficients : BT.709


    It's just strange DVR is using the 0-255 range as default (auto). AFAIK 16-235 is standard.

    Thank you for the "prototype," It definitely works!

    Well, I have to admit it's more than a prototype already. :) Development was surprisingly easy. I just wanted it to be careful as the whole plugin was not thoroughly tested and basically just a quick hack of 2 days work.


    I just tested it on Getty, and the great news - generated ProRes passed the Getty's automatic QualityControl on ESP. Before that day, only two converters out of many I tried have been passed: Acrovid FootageStudio 4K and ProDad Mercalli (which is not exactly a converter but can be used like this).

    That's really awesome! Good to know.

    Another question, will be color_range, colorspace, and color_primaries be supported?


    static PropertyID pIOPropColorPrimaries = "clrPrimaries"; // int16_t

    static PropertyID pIOTransferCharacteristics = "clrTransfer"; // int16_t

    static PropertyID pIOColorMatrix = "clrMtx"; // int16_t

    Very good point. Thats whats currently still left and what I was looking in today.

    • ColorRange will be set in the next version
    • Voukoder also needs this fields to be set. Unfortunately the values are not defined/documented in the DVR plugin SDK. So I don't know how to map these values.
      • frameData.colorSpace (pIOColorMatrix )
      • frameData.colorPrimaries (pIOPropColorPrimaries)
      • frameData.colorTransfer (pIOTransferCharacteristics)

    And it is used by default, right?

    Yes, I used "prores_ks" for voukoder as I was told it is the best implementation.

    I'm getting around half the speed from Resolve's Nvidia Encoding.


    Resolve 1440p 60fps: ~240fps while encoding (4:01 for a 15min Vid)

    Voukoder 1440 60fps with h264 nvidia preset: ~114fps while encoding (7:56 for a 15min Vid)

    Well, this is just a first prototype of 2 days work. Nothing has been optimized yet. But I don't think voukoder will ever be faster than the native DVR implementation. The goal is to have more encoders available in DVR - the existing encoder implementations seem to be quite good actually.


    Currently the plugin gets the video as 422 and voukoder needs to convert it down to 420. That's something I can still optimize and it should give some more speed.


    You have an active filter btw (gamma correction). Removing it gave me 40 more fps.

    It runs stable, but I have to restart Resolve after using Voukoder, because the normal encoder wouldn't work anymore.

    Looking into that.


    Edit: This seems to be working after todays DVR update (17.1.1 Build 9)

    My GPU also only gets 50% Usage while enconding with Voukoder. Maybe I did something wrong here? Normal Resolve encoding uses around 99% GPU.

    If you set the preset to "slow" it uses 100% GPU.


    Still: Voukoder is not the magical tool to make everything faster. But it might offer you more encoders and more options. And I guess DVR uses CUDA in a clever way to prevent lots of copy actions from/to host and gpu.

    Here is the first prototype to test. Please tell about your findings / issues here in this thread. (You need to have Voukoder installed, of course).


    Extract the ZIP file here and start Resolve.



    The plugin will appear here:



    Please note: If you like it and if you want to have further support and development consider donating. It will really help me, thanks.


    P.S.: It will only work with the studio version of DVR. The plugin does not work with the free version.


    Edit: You can find the latest version in the regular voukoder download section now.

    I'll have to find some time to investigate this in detail, but ...


    An encoder encodes exactly one uncompressed stream to a compressed stream. (That's what Mainconcept might do). i.e. uncompressed 4:2:0 to compressed h264.


    It then returns the data back to DVR so it can package it in whatever container it wants. (i.e. MP4 or MOV)


    The big question I need to find out is if DVR also supports an external muxer. So i can get both video and audio (in sync) from DVR, send both to Voukoder and Voukoder handles muxing and outputting.


    But from what I've read is that this SDK is an encoder SDK only. It is not a generic File I/O SDK, which I have for Premiere, AfterEffects and VEGAS.