VideoHelp Forum

+ Reply to Thread
Results 1 to 19 of 19
Thread
  1. Member
    Join Date
    May 2013
    Location
    Staffordshire
    Search Comp PM
    Hi
    I have got an Nvidia Quadro P620 and I am trying to convert my DX50 and libx264 files into libx265 format.
    The command i'm using is

    ffmpeg -hwaccel cuda -i abc.mp4 -c:v libx265 converted.mp4

    I don't see any workload has been offloaded to my graphic card. All workload has been borne on my CPU.
    What is the right syntax?
    Last edited by wonmanfactory; 3rd Oct 2021 at 06:51. Reason: code emphasis
    Quote Quote  
  2. a. your source can't be decoded by cuda, so hardware accelleration can't be used for decoding
    b. the encoder you chose (x265) does not use cuda.
    If you want to use the Hevc hardware encoder on your card with ffmpeg, read: https://trac.ffmpeg.org/wiki/Encode/H.265

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  3. Originally Posted by Selur View Post
    a. your source can't be decoded by cuda, so hardware accelleration can't be used for decoding
    b. the encoder you chose (x265) does not use cuda.
    If you want to use the Hevc hardware encoder on your card with ffmpeg, read: https://trac.ffmpeg.org/wiki/Encode/H.265

    Cu Selur
    You forget to mention a transcoding software, like Hybrid, and the NVENC encoder.
    Quote Quote  
  4. Nope, didn't forget to mention:
    a. Hybrid, since it's specifically meant for users that know what they are doing, so I rarely recommend it unless it's the only free tool that can do the job that I know of.
    b. NVEncC, since the question was about using ffmpeg.

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  5. Originally Posted by Selur View Post
    Nope, didn't forget to mention:
    a. Hybrid, since it's specifically meant for users that know what they are doing, so I rarely recommend it unless it's the only free tool that can do the job that I know of.
    b. NVEncC, since the question was about using ffmpeg.

    Cu Selur
    But FFMPEG is one of the worst tool for HW encoders decoders. For example it is slow, because it doesn't know the fast "in-card" encoding decoding.
    Last edited by Truthler; 3rd Oct 2021 at 07:56.
    Quote Quote  
  6. FFmpeg like NVEncC can use the NVIDIA hardware decoder (NVDec) and the NVIDIA hardware encoder (NVEnc) nowadays and is by no means slower than NVEncC or any other tools using NVEnc. That statement isn't correct any more.
    Personally I do prefer NVEncC, but only since:
    a. I get way faster feedback from it's developer.
    b. it's a lot better documented.
    So advertising other tools to users who ask how to do something with tool X is not what I would do unless I know that tool X can't do it.

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  7. Member
    Join Date
    May 2013
    Location
    Staffordshire
    Search Comp PM
    so in order to deploy the graphics card, both input and output codecs have to be supported by the graphics card?
    Quote Quote  
  8. No, you can:
    a. use the hardware decoder chip of the graphics card if the content is supported by it.
    b. use the hardware encoder chip of the graphics card if the encoder that you use uses it.
    In your example you use:
    a. a content that is not supported by the decoder chip of the graphics card
    b. an encoder that does not use the encoder chip of the graphics card.

    For example:
    • Code:
      ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "Path to input" -c:v h264_nvenc -preset slow "path to output"
      would be a call that uses the hardware decoder and encoder to encode H.264 content.
    • Code:
      ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "Path to input" -c:v hevc_nvenc -preset slow "path to output"
      would be a call that uses the hardware decoder and encoder to encode H.265 content.
    • Code:
      ffmpeg -i "Path to input" -c:v h264_nvenc -preset slow "path to output"
      would be a call that uses the normal software decoder and the hardware encoder to encode H.264 content.
    • Code:
      ffmpeg -i "Path to input" -c:v hevc_nvenc -preset slow "path to output"
      would be a call that uses the normal software decoder and the hardware encoder to encode H.265 content.
    for further details really read https://trac.ffmpeg.org/wiki/HWAccelIntro

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  9. Selur, do you mean that ffmpeg can transcode a 4K video with full complex settings with 30-40fps speed as the NVENCc ?
    Quote Quote  
  10. What the speed in that process is depends on your hardware, but yes, ffmpeg can encode with the same speed as NVEncC.
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  11. Member
    Join Date
    May 2013
    Location
    Staffordshire
    Search Comp PM
    I donít understand. I am using FFMPEG to transcode. Are you talking about some other software to do this?

    Originally Posted by Truthler View Post
    Originally Posted by Selur View Post
    a. your source can't be decoded by cuda, so hardware accelleration can't be used for decoding
    b. the encoder you chose (x265) does not use cuda.
    If you want to use the Hevc hardware encoder on your card with ffmpeg, read: https://trac.ffmpeg.org/wiki/Encode/H.265

    Cu Selur
    You forget to mention a transcoding software, like Hybrid, and the NVENC encoder.
    Quote Quote  
  12. I am not.
    Truthler mentioned that I should mention other software than ffmpeg and I replied that the question was about ffmpeg and I think that it's wrong to mention other software since he was wrong to believe that using ffmpeg is slower than using for example NVEncC.

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  13. Originally Posted by Selur View Post
    I am not.
    Truthler mentioned that I should mention other software than ffmpeg and I replied that the question was about ffmpeg and I think that it's wrong to mention other software since he was wrong to believe that using ffmpeg is slower than using for example NVEncC.

    Cu Selur
    According to my tests, FFMPEG can achieve 10-18 FPS in 4K with full max settings in NVENC HEVC, using HW decoder. I achieved 30-40 FPS with Rigaya's NVENC. Moreover Rigaya's NVENC uses HW accelerated avisynth too.
    Last edited by Truthler; 6th Oct 2021 at 02:38.
    Quote Quote  
  14. @Truthler: no clue how you conducted your tests,.. so sure everything is possible on your setup.
    Rigaya's NVENC uses HW accelerated avisynth too.
    are you sure that nvencc doesn't revert to software decoding in that case, since last I read the documentation there was no was to use hardware decoding on ray yuv/rgb data like you get it from AviSynth,... (also last I looked at the source code of NVEncC there was nothing that would suggest that something lie that would even be tried)
    This should be in another thread so that this thread doesn't get unnecessary confusing for the topic starter.
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  15. Originally Posted by Selur View Post
    @Truthler: no clue how you conducted your tests,.. so sure everything is possible on your setup.
    Rigaya's NVENC uses HW accelerated avisynth too.
    are you sure that nvencc doesn't revert to software decoding in that case, since last I read the documentation there was no was to use hardware decoding on ray yuv/rgb data like you get it from AviSynth,... (also last I looked at the source code of NVEncC there was nothing that would suggest that something lie that would even be tried)
    This should be in another thread so that this thread doesn't get unnecessary confusing for the topic starter.
    Hello Selur!

    I always check the % of the usage of video-card's encoder unit and the usage of the decoder unit in the Windows task manager during the transcoding processes.
    Last edited by Truthler; 6th Oct 2021 at 04:24.
    Quote Quote  
  16. You still did not share what your were doing.
    What command line are you comparing to what?
    Also how you came up with the idea that NVEncC 'uses HW accelerated avisynth'.
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  17. Originally Posted by Truthler View Post
    But FFMPEG is one of the worst tool for HW encoders decoders. For example it is slow, because it doesn't know the fast "in-card" encoding decoding.
    I have no idea what you are smoking but get off it.

    Ffmpeg is used by numerous applications as there back end; I will grant you that in terms of hardware encoding via NVENC, QSV, or AMF it may not offer the fine grained control that competing solutions do, but it is definitely not slow.

    BTW, ffmpeg is used by Amazon for hardware transcoding via Xelinx FPGA cards through their AWS service:

    https://www.servethehome.com/amazon-aws-ec2-vt1-instances-use-xilinx-fpgas-for-video-transcoding/
    Quote Quote  
  18. Member
    Join Date
    May 2013
    Location
    Staffordshire
    Search Comp PM
    Originally Posted by Selur View Post
    No, you can:
    a. use the hardware decoder chip of the graphics card if the content is supported by it.
    b. use the hardware encoder chip of the graphics card if the encoder that you use uses it.
    In your example you use:
    a. a content that is not supported by the decoder chip of the graphics card
    b. an encoder that does not use the encoder chip of the graphics card.

    For example:
    • Code:
      ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "Path to input" -c:v h264_nvenc -preset slow "path to output"
      would be a call that uses the hardware decoder and encoder to encode H.264 content.
    • Code:
      ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "Path to input" -c:v hevc_nvenc -preset slow "path to output"
      would be a call that uses the hardware decoder and encoder to encode H.265 content.
    • Code:
      ffmpeg -i "Path to input" -c:v h264_nvenc -preset slow "path to output"
      would be a call that uses the normal software decoder and the hardware encoder to encode H.264 content.
    • Code:
      ffmpeg -i "Path to input" -c:v hevc_nvenc -preset slow "path to output"
      would be a call that uses the normal software decoder and the hardware encoder to encode H.265 content.
    for further details really read https://trac.ffmpeg.org/wiki/HWAccelIntro

    Cu Selur
    I just tried
    Code:
    ffmpeg -c:v h264_cuvid -i input.mp4 -c:v hevc_nvenc -preset slow test.mp4
    There is no compression at all. My original file is 99.2MB, the hevc file is 553MB.
    But the file converted by libx265 is only 76.1MB.
    Why so??
    Quote Quote  
  19. There is no compression at all. My original file is 99.2MB, the hevc file is 553MB.
    Sure there is compression, an uncompressed file would be way larger.

    But the file converted by libx265 is only 76.1MB.
    Why so??
    The default encoding options in libx265 and hevc_nvenc are not the same.

    Since you use hevc_nvenc, looking at the options with:
    Code:
    ffmpeg -h encoder=hevc_nvenc
    would be a start,..
    Code:
    hevc_nvenc AVOptions:
      -preset            <int>        E..V....... Set the encoding preset (from 0 to 18) (default p4)
         default         0            E..V.......
         slow            1            E..V....... hq 2 passes
         medium          2            E..V....... hq 1 pass
         fast            3            E..V....... hp 1 pass
         hp              4            E..V.......
         hq              5            E..V.......
         bd              6            E..V.......
         ll              7            E..V....... low latency
         llhq            8            E..V....... low latency hq
         llhp            9            E..V....... low latency hp
         lossless        10           E..V....... lossless
         losslesshp      11           E..V....... lossless hp
         p1              12           E..V....... fastest (lowest quality)
         p2              13           E..V....... faster (lower quality)
         p3              14           E..V....... fast (low quality)
         p4              15           E..V....... medium (default)
         p5              16           E..V....... slow (good quality)
         p6              17           E..V....... slower (better quality)
         p7              18           E..V....... slowest (best quality)
      -tune              <int>        E..V....... Set the encoding tuning info (from 1 to 4) (default hq)
         hq              1            E..V....... High quality
         ll              2            E..V....... Low latency
         ull             3            E..V....... Ultra low latency
         lossless        4            E..V....... Lossless
      -profile           <int>        E..V....... Set the encoding profile (from 0 to 4) (default main)
         main            0            E..V.......
         main10          1            E..V.......
         rext            2            E..V.......
      -level             <int>        E..V....... Set the encoding level restriction (from 0 to 186) (default auto)
         auto            0            E..V.......
         1               30           E..V.......
         1.0             30           E..V.......
         2               60           E..V.......
         2.0             60           E..V.......
         2.1             63           E..V.......
         3               90           E..V.......
         3.0             90           E..V.......
         3.1             93           E..V.......
         4               120          E..V.......
         4.0             120          E..V.......
         4.1             123          E..V.......
         5               150          E..V.......
         5.0             150          E..V.......
         5.1             153          E..V.......
         5.2             156          E..V.......
         6               180          E..V.......
         6.0             180          E..V.......
         6.1             183          E..V.......
         6.2             186          E..V.......
      -tier              <int>        E..V....... Set the encoding tier (from 0 to 1) (default main)
         main            0            E..V.......
         high            1            E..V.......
      -rc                <int>        E..V....... Override the preset rate-control (from -1 to INT_MAX) (default -1)
         constqp         0            E..V....... Constant QP mode
         vbr             1            E..V....... Variable bitrate mode
         cbr             2            E..V....... Constant bitrate mode
         vbr_minqp       8388612      E..V....... Variable bitrate mode with MinQP (deprecated)
         ll_2pass_quality 8388616      E..V....... Multi-pass optimized for image quality (deprecated)
         ll_2pass_size   8388624      E..V....... Multi-pass optimized for constant frame size (deprecated)
         vbr_2pass       8388640      E..V....... Multi-pass variable bitrate mode (deprecated)
         cbr_ld_hq       8388616      E..V....... Constant bitrate low delay high quality mode
         cbr_hq          8388624      E..V....... Constant bitrate high quality mode
         vbr_hq          8388640      E..V....... Variable bitrate high quality mode
      -rc-lookahead      <int>        E..V....... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
      -surfaces          <int>        E..V....... Number of concurrent surfaces (from 0 to 64) (default 0)
      -cbr               <boolean>    E..V....... Use cbr encoding mode (default false)
      -2pass             <boolean>    E..V....... Use 2pass encoding mode (default auto)
      -gpu               <int>        E..V....... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
         any             -1           E..V....... Pick the first device available
         list            -2           E..V....... List the available devices
      -delay             <int>        E..V....... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
      -no-scenecut       <boolean>    E..V....... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
      -forced-idr        <boolean>    E..V....... If forcing keyframes, force them as IDR frames. (default false)
      -spatial_aq        <boolean>    E..V....... set to 1 to enable Spatial AQ (default false)
      -spatial-aq        <boolean>    E..V....... set to 1 to enable Spatial AQ (default false)
      -temporal_aq       <boolean>    E..V....... set to 1 to enable Temporal AQ (default false)
      -temporal-aq       <boolean>    E..V....... set to 1 to enable Temporal AQ (default false)
      -zerolatency       <boolean>    E..V....... Set 1 to indicate zero latency operation (no reordering delay) (default false)
      -nonref_p          <boolean>    E..V....... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
      -strict_gop        <boolean>    E..V....... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
      -aq-strength       <int>        E..V....... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
      -cq                <float>      E..V....... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
      -aud               <boolean>    E..V....... Use access unit delimiters (default false)
      -bluray-compat     <boolean>    E..V....... Bluray compatibility workarounds (default false)
      -init_qpP          <int>        E..V....... Initial QP value for P frame (from -1 to 51) (default -1)
      -init_qpB          <int>        E..V....... Initial QP value for B frame (from -1 to 51) (default -1)
      -init_qpI          <int>        E..V....... Initial QP value for I frame (from -1 to 51) (default -1)
      -qp                <int>        E..V....... Constant quantization parameter rate control method (from -1 to 51) (default -1)
      -qp_cb_offset      <int>        E..V....... Quantization parameter offset for cb channel (from -12 to 12) (default 0)
      -qp_cr_offset      <int>        E..V....... Quantization parameter offset for cr channel (from -12 to 12) (default 0)
      -weighted_pred     <int>        E..V....... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
      -b_ref_mode        <int>        E..V....... Use B frames as references (from 0 to 2) (default disabled)
         disabled        0            E..V....... B frames will not be used for reference
         each            1            E..V....... Each B frame will be used for reference
         middle          2            E..V....... Only (number of B frames)/2 will be used for reference
      -a53cc             <boolean>    E..V....... Use A53 Closed Captions (if available) (default true)
      -s12m_tc           <boolean>    E..V....... Use timecode (if available) (default true)
      -dpb_size          <int>        E..V....... Specifies the DPB size used for encoding (0 means automatic) (from 0 to INT_MAX) (default 0)
      -multipass         <int>        E..V....... Set the multipass encoding (from 0 to 2) (default disabled)
         disabled        0            E..V....... Single Pass
         qres            1            E..V....... Two Pass encoding is enabled where first Pass is quarter resolution
         fullres         2            E..V....... Two Pass encoding is enabled where first Pass is full resolution
      -ldkfs             <int>        E..V....... Low delay key frame scale; Specifies the Scene Change frame size increase allowed in case of single frame VBV and CBR (from 0 to 255) (default 0)
      -extra_sei         <boolean>    E..V....... Pass on extra SEI data (e.g. a53 cc) to be included in the bitstream (default true)
      -intra-refresh     <boolean>    E..V....... Use Periodic Intra Refresh instead of IDR frames (default false)
      -single-slice-intra-refresh <boolean>    E..V....... Use single slice intra refresh (default false)
      -constrained-encoding <boolean>    E..V....... Enable constrainedFrame encoding where each slice in the constrained picture is independent of other slices (default false)
    would be the usual starting point.

    If you use bitrate encoding your could for example add "-b:v 5M" to aim for rougkly 5MBit/s, so depending on what size you want you could adjust the target bitrate,...

    May be after reading https://developer.nvidia.com/blog/nvidia-ffmpeg-transcoding-guide/ and similar articles (internet search engines should provide a few) about encoding with ffmpeg and NVEnc you understand what is happening.

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote