CRFベースのエンコードの場合、以下のスニペットで次の引数をFFmpegに渡します。
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
もちろん、目標ビットレートと固定cq
値を調整する必要があります。19は視覚的に0と同じですが、推奨される設定ですが、ファイルサイズとの優れた圧縮トレードオフを維持します。参照してください。これをCRFの機能の記事を。
-cq
スケールは対数であることに注意してください。つまり、0は本質的に無損失であり、51は絶対最悪です。
品質はさらになどのオプション追加することによって大幅に改善することができるBフレームを(最大で、3にこれを制限し、これはH.264のメインプロファイルとの上を必要とする。ベースラインプロファイルはBフレームをサポートしていません。これを行うには、通過-bf {uint}
しますビデオエンコーダ。これ-bf:v 4
により、エンコーダは4つのBフレームを使用します。
ここで重要なのは、引数-cq:v 19
と-rc:v vbr_hq
引数です。これにより、CRF値19を遵守しながら、プリセットの可変ビットレートと最大許容ビットレート(-b:v
および-maxrate:v
)の両方でエンコーダーを調整できます。
そして今、NVENCについての小さなメモと、高品質のエンコードのためにそれを調整します。
NVENCは、他のハードウェアベースのエンコーダーと同様に、いくつかの制限があり、特にHEVCに関しては、次の既知の制限があります。
パスカルで:
HEVCエンコードの場合、次の制限が適用されます。
- 32を超えるCTUサイズはサポートされていません。
- HEVCのBフレームもサポートされていません。
- NVENCエンコーダーでサポートされているテクスチャ形式は、エンコーダーが使用できる色空間を制限します。今のところ、4:2:0(8ビット)および4:4:4(10ビット)をサポートしています。4:2:2 10ビットなどの無関係な形式はサポートされていません。これは、このような色空間が必要な一部のワークフローに影響します。
- 先読み制御も32フレームに制限されています。詳細については、この社説をご覧ください。
TuringにはPascalで利用可能なすべての拡張機能があり、HEVCのBフレームサポートが追加され、Bフレームを参照として使用する機能が追加されています。この機能の例については、この回答を参照してください。
Maxwell Gen 2(GM200xシリーズGPU)の場合:
HEVCエンコーディングには次の機能がありません。
ここでのマックスウェルの影響は、ビットレートが制限されたHEVCを使用した動きの激しいシーンでは、先読み機能が欠落し、SAO(Adaptive Sample Offset)ループフィルタリング機能によりアーティファクト(ブロック)が発生する可能性があることです。Pascalではこの機能が多少改善されていますが、ビデオエンコーダーのビルドに使用されたSDKのバージョンによっては、すべての機能が利用できるとは限りません。
たとえば、PascalでのH.264エンコードの重み付き予測モードにはNVENC SDK 8.0x以降が必要であり、このエンコードモードではBフレームのサポートも無効になります。同様に、Nvidia Performance Primitives(NPP)で実行されるハードウェアベースのスケーラーとNVENCの組み合わせは、特にスケーリングされたコンテンツのスケーリングアーティファクトを犠牲にして、ビデオスケーリングアプリケーションのパフォーマンスを向上させる可能性があります。NPPのスケーリング機能がGPU上のCUDAコアで実行されるため、同じことがビデオエンコードパイプラインにも影響を与えます。そのため、追加の負荷によってもたらされるパフォーマンスへの影響をケースバイケースで分析して、パフォーマンス品質を判断する必要がありますトレードオフは許容されます。
この点に留意してください:ハードウェアベースのエンコーダーは、同等のソフトウェアベースの実装よりもカスタマイズが常に若干少ないため、燃費と許容出力品質は常に異なります。
あなたの参考のために:
FFmpegを使用すると、エンコーダーの設定をいつでも参照してカスタマイズできます。
ffmpeg -h encoder {encoder-name}
したがって、NVENCベースのエンコーダーでは、次を実行できます。
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
また、次のコマンドを実行すると、すべてのNVENCベースのエンコーダーとNPPベースのスケーラー(そのように構築されている場合)を表示できます。
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
テストベッドのサンプル出力:
encoders:
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
decoders:
V..... h263_cuvid Nvidia CUVID H263 decoder (codec h263)
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)
filters:
... hwupload_cuda V->V Upload a system memory frame to a CUDA device.
... scale_npp V->V NVIDIA Performance Primitives video scaling and format conversion
slow
しfast
、あなたの最初のコマンドで。CRFはに実装されていませんnvenc
。