提高 FFmpeg 和 NVENC 输出质量

提高 FFmpeg 和 NVENC 输出质量

有没有办法在不增加比特率的情况下提高输出质量?此外,有没有办法使用 提高代码质量tee?阅读完所有我能找到的资料后ffmpegnvenc我能够编写这些命令,如果没有动作(游戏大厅中没有太多东西移动),它们就可以正常工作,一旦我得到一些动作,输出质量就会下降 -> 到处都是伪影。输入流是1080p 60fps。GPU 1 是 Nvidia Quadro p1000,带有修补过的驱动程序,能够进行超过 3 个并发连接。输入编码由 GPU 0 完成并传递给本地主机上的 MonaServer。

ffmpeg -hide_banner -i rtmp://localhost:1935/live/stream
 -c:v h264_nvenc -cbr true -b:v 6M -preset slow -c:a copy -gpu 1 -f flv "rtmp://twitch_server/streamkey"
 -c:v h264_nvenc -cbr true -b:v 6M -preset slow -c:a copy -gpu 1 -f flv "rtmp://facebook_server/streamkey"
 -c:v h264_nvenc -cbr true -b:v 9M -preset slow -c:a copy -gpu 1 -f flv "rtmp://youtube_server/streamkey"

这就是我得到的ffmpeg -hide_banner -h encoder=h264_nvenc

Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
        General capabilities: delay hardware
        Threading capabilities: none
        Supported hardware devices: cuda cuda d3d11va d3d11va
        Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda d3d11
    h264_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......
         losslesshp      11           E..V......
         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 3) (default main)
         baseline        0            E..V......
         main            1            E..V......
         high            2            E..V......
         high444p        3            E..V......
      -level             <int>        E..V...... Set the encoding level restriction (from 0 to 62) (default auto)
         auto            0            E..V......
         1               10           E..V......
         1.0             10           E..V......
         1b              9            E..V......
         1.0b            9            E..V......
         1.1             11           E..V......
         1.2             12           E..V......
         1.3             13           E..V......
         2               20           E..V......
         2.0             20           E..V......
         2.1             21           E..V......
         2.2             22           E..V......
         3               30           E..V......
         3.0             30           E..V......
         3.1             31           E..V......
         3.2             32           E..V......
         4               40           E..V......
         4.0             40           E..V......
         4.1             41           E..V......
         4.2             42           E..V......
         5               50           E..V......
         5.0             50           E..V......
         5.1             51           E..V......
         5.2             52           E..V......
         6.0             60           E..V......
         6.1             61           E..V......
         6.2             62           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       8            E..V...... Constant bitrate low delay high quality mode
         cbr_hq          16           E..V...... Constant bitrate high quality mode
         vbr_hq          32           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)
      -b_adapt           <boolean>    E..V...... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
      -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)
      -weighted_pred     <int>        E..V...... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
      -coder             <int>        E..V...... Coder type (from -1 to 2) (default default)
         default         -1           E..V......
         auto            0            E..V......
         cabac           1            E..V......
         cavlc           2            E..V......
         ac              1            E..V......
         vlc             2            E..V......
      -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)
      -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)

答案1

 ffmpeg.exe -vsync 0 -hwaccel cuda -i "Drive:\PATH\Input.webm" -c:v h264_nvenc -rc constqp -qmin 17 -qmax 51 -qp 24 -preset p7 -tune hq -pix_fmt yuv420p -rc-lookahead 4 -profile:v high -bf 0 -keyint_min 1 -refs 7 -qdiff 20 -qcomp 0.9  -me_method umh -subq 9 -me_range 36 -b:v 0 -g 300  -c:a copy  "Drive:\PATH\Output.mp4" 

适用于 GeForce GTX 1660Ti

“在不增加比特率的情况下提高质量”,唯一可能的解决方案是获得“最佳性价比”,即尽可能最佳的压缩率。以上是我用于 QP 的“标准”参数。

-rc constqp:保持质量恒定。就您而言,如果源没有伪影,则不应该有伪影。

-qcmin 和 -qcmax:由于定义并使用了固定的 qp,因此可能是多余的。

-preset p7 和 -tune hq:这些可能是最重要的参数,需要对视频进行严格的分析(在给定的比特率下获得更好的质量)。

-rc-lookahead 4-keyint_min 1-qdiff 20-qcomp 0.9:如果编码器认为应该将 KF 放置得靠近,我并不介意,这有助于在帧在任何时候有很大差异时“重置”运动估计向量。将速率变化的 Lookahead 4 与 -qdiff、-qcomp 结合设置为这些值,可以根据帧的需求快速提高或降低比特率。

由于设置了“-keyint_min 1”,我不介意将 KF 间隔设置为最大值 300。

-me_method 嗯:是多余的,仅包括由于习惯所致的。

B帧被排除,这是一个个人选择,我认为这更适合存档,在这一点上我可能与大家意见相左,但我真的不喜欢有 b 帧。

相关内容