Улучшение качества вывода FFmpeg и NVENC

Есть ли способ улучшить качество вывода без увеличения битрейта? Кроме того, есть ли способ улучшить качество кода с помощью tee? Прочитав все, что смог найти о ffmpeg и nvenc Я смог написать эти команды, и они отлично работают, если нет действий (внутриигровое лобби, где не так много движется), как только я получаю какое-то действие, качество вывода падает -> артефакты повсюду место. Входной поток 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)

Ответ:

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.

-настройка p7 и -настройка hq : это, возможно, наиболее важные параметры, требующие тщательного анализа видео (лучшее качество при заданном битрейте).

-rc-lookahead 4 -keyint_min 1 -qdiff 20 -qcomp 0.9: я не возражаю, чтобы KFS были близки друг к другу, если кодировщик считает, что он должен их так разместить, это помогает «сбросить» векторы оценки движения, если кадры значительно отличаются в любой момент. Предварительный просмотр 4 для изменения скорости в сочетании с -qdiff, -qcomp, установленный на эти значения, дает свободу действий для быстрого увеличения и уменьшения битрейта в зависимости от требований кадра.

Поскольку установлен параметр ‘-keyint_min 1’, я не возражаю против установки интервала KF не более 300.

-me_method umh: является избыточным, включен только в силу привычки.

B-кадры исключены, это личный выбор, и я думаю, что он лучше подходит для архивирования, я, вероятно, не согласен со всеми в этом, но я действительно предпочитаю не иметь b-кадров.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *