web-dev-qa-db-ja.com

NVENCによるFFMpegの最適設定

私は私の衛星放送受信機からファイルを変換するために私のGPUのサポート(NVENC)と私FFMPEGを使っています(SD、mpeg2 .TS-Files)からh264 .mp4-filesへ

これが私が使っている行です。

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

しかし質は期待されるほどよくありません。そして私のシステムの全能力は使用されていません。

enter image description here

わずか11%のGPUと30%のCPU使用率。

質問:ファイルサイズを同じにして品質を向上させ、Geforce GTX 1080の計算能力をさらに向上させるためにできる改善点はいくつかありますか。

変更する 林正浩 からいくつかの パラメータ が見つかりましたが、-preset slowはすでにあるはずです最高の品質のアプローチではありませんか?

18
Dr. Snail

これはエンコーダを調整するための大まかなガイドです:

基本的なところから始めましょう。オプションの簡単な弾幕が、目的の目的や期待を理解することなく予想される成果を突然改善するという結論に飛び込むのは有害です。

1。エンコーダのオプションを理解することから始めます

NVENCベースのエンコーダの場合は、まず各エンコーダが取るオプションを学びます(Linuxを使っているため、ここで貼り付ける前にxclipを使用してコーデックオプションをクリップボードにコピーします)。

(a) H.264エンコーダの場合:

ffmpeg -hide_banner -h encoder=h264_nvenc | xclip -sel clip

出力:

Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
h264_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... 
     losslesshp                   E..V.... 
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 3) (default main)
     baseline                     E..V.... 
     main                         E..V.... 
     high                         E..V.... 
     high444p                     E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 51) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     1b                           E..V.... 
     1.0b                         E..V.... 
     1.1                          E..V.... 
     1.2                          E..V.... 
     1.3                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     2.2                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     3.2                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     4.2                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       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                          E..V.... Pick the first device available
     list                         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)
  -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                      E..V.... 
     auto                         E..V.... 
     cabac                        E..V.... 
     cavlc                        E..V.... 
     ac                           E..V.... 
     vlc                          E..V.... 

(b) HEVC/H.265エンコーダの場合:

ffmpeg -hide_banner -h encoder=hevc_nvenc | xclip -sel clip

出力:

Encoder hevc_nvenc [NVIDIA NVENC hevc encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
hevc_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... lossless
     losslesshp                   E..V.... lossless hp
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 4) (default main)
     main                         E..V.... 
     main10                       E..V.... 
     rext                         E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 186) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
     5.2                          E..V.... 
     6                            E..V.... 
     6.0                          E..V.... 
     6.1                          E..V.... 
     6.2                          E..V.... 
  -tier              <int>        E..V.... Set the encoding tier (from 0 to 1) (default main)
     main                         E..V.... 
     high                         E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       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                          E..V.... Pick the first device available
     list                         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)
  -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)

2。ハードウェアの制限を理解し、オプションを適用する前にまず正当なデフォルトを守ります。

NVENCで遭遇するハードウェアの制限、特にPascalでのHEVCエンコードについては、この回答を参照してください。

その後、その情報を使用して、次の手順に進みます。

3。構文は重要です。

これがFFmpegに引数を渡さなければならない順序です:

(a)バイナリを呼び出します。

(b)入力を宣言する前に、FFmpegに引数(直接-loglevelなど)を渡す。

(c) cuvidなどのハードウェアアクセラレーションによるデコードを使用している場合は、ここでそれを宣言し、必要な特定の引数をすべて含めます。現時点では、予想される入力解像度、サポートされているコーデックなど、デコーダには特定の制約があることに言及することは必須です。そのため、実運用ではハードウェアアクセラレーションデコーダを無効にすることを推奨します。エンコードに失敗したため、回復できません。実際、 MPV開発者はこれを繰り返し述べています 。ミッションクリティカルなコンテンツ配信のためにハードウェアアクセラレーションによるデコーディングに頼らないでください。

(d)あなたの入力を宣言してください。ストリームの場合はURLを使用し、必要に応じて必要に応じて追加のフラグ(バッファサイズなど)を追加します。 (アクセス可能なファイルシステム上の)ローカルリソースの場合は、絶対ファイルパスが必要です。

(e)必要に応じて、フィルタを挿入してください。これは、サイズ変更、ピクセル形式の会話、インターレース解除などの機能に必要です。ここで使用しているフィルタによっては、ハードウェアベースのデコーダ(セクション(c)で説明)によって、フィルタが可能な制約が導入されます。そうでなければあなたのエンコードは失敗するでしょう。

(f)適切なビデオおよびオーディオエンコーダを呼び出し、マッピング、ビットレート、エンコーダプリセットなどの必要な引数をそれらに渡します。

(g) FFmpegは選択された出力ファイルの拡張子に応じてファイルの必要な出力フォーマットを推測することができますが、必要ならば余分なオプションをマルチプレクサに渡すことができるように(-fオプションを通して)明示的に出力フォーマットを宣言することをお勧めします。 HLS、mpegts、DASHなどのストリーミングフォーマットでよくあることです。

(h)出力ファイルへの絶対パス。

上記の例では、次のように引用されています。

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

より高いビットレートを相殺し、適応量子化エンコーディング技術を有効にすることで(「AQ方式はサポートされています。一度に使用できるのは1つのみです。Bフレームのサポートも無効になります)以下に示すように、オプションで重み付き予測手法を有効にします。また、必要に応じて、適切な縮小とサイズ変更のためのオプションのフィルタも有効にします。

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v mpeg2_cuvid -i "e:\input.ts" \
-filter:v scale_npp=w=1920:h=1080:format=yuv420p:interp_algo=lanczos \
-c:v h264_nvenc -preset:v llhq -profile:v main -level:v 4.1 -rc:v ll_2pass_quality -rc-lookahead:v 32 -temporal-aq:v 1 -weighted_pred:v 1 -coder:v cabac \
-f mp4 "e:\output.mp4"

上記のスニペットは、入力ファイルがMPEG2ストリームであると仮定しています。そうでない場合は、分析した後に正しいCUVIDデコーダに切り替えます。

ffprobe -i e:\input.ts

H.264/AVCの場合は、以下のようにスニペットを修正します。

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v scale_npp=w=1920:h=1080:format=yuv420p:interp_algo=lanczos \
-c:v h264_nvenc -preset:v llhq -profile:v main -level:v 4.1 -rc:v ll_2pass_quality -rc-lookahead:v 32 -temporal-aq:v 1 -weighted_pred:v 1 -coder:v cabac \
-f mp4 "e:\output.mp4"

スレッド数に関する追加の注意事項(-threadsオプションを介してffmpegに渡される):

特定のしきい値を超えるエンコーダスレッドが増えると、待ち時間が長くなり、エンコードメモリのフットプリントも大きくなります。エンコード遅延が増加するため、固定ビットレートモードおよびVBV(ビデオバッファベリファイア)と呼ばれるほぼ一定のビットレートモードでスレッド数が多くなると、品質の低下がより顕著になります。キーフレームは、低品質のキーフレームを脈動させないために、他のフレームタイプよりも多くのデータを必要とします。

ゼロ遅延モードまたはスライススレッドモードでは遅延はありませんが、このオプションはサポートされているエンコーダのマルチスレッド品質をさらに悪化させます。

そのため、認識されるエンコーダのスループットが向上すると、長期的には利点が相殺されるため、待ち時間が重要な場合はエンコードのスレッド数を制限することをお勧めします。

そしてあなたがWindowsを使っているので、上のコマンドをテストするUnixボックスからこれを書いているのであなたは上の\シェルエスケープを削除したいかもしれません。

24
林正浩

オーディオ用のLibvorbisは遅いようです。 ac3はあなたに15%のスピードアップを与えるでしょう。

ビデオドライバに問題があるか、古いffmpegを使用しているとのことです。あなたのクリップはありませんが、私のPVRからSD tsファイルを取得し、あなたの設定を使用しました。

私はGTX750(非TI)で700fps(あなたの設定)を手に入れました。

私は925fps(AC3オーディオであなたの設定)を持っています

私がすることができる他の勧告は次のとおりです。

Qmaxを約23に変更してください。

1
Don Giovanni

Nvencを使用した私の経験では、必要なビットレートを指定する必要があります。デフォルトはVBRですが、これで問題ありません。どの解像度ファイルをフィードするか。それはエンコーダの欠陥のようです。他のすべての点で予測どおりに動作しますが、(たとえば)720pファイルの場合は-b:v 4M、1080pの場合は-b:v 8Mが必要です。あなたが望むなら、あなたもおそらくそれらを少し下げることができます。

1
serilain