動画ホスティングサイトLBRYアップロードを圧縮するには次のコマンドを試すことをユーザーに提案します:
ffmpeg -i input.avi -c:v libx264 -crf 21 -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K -vf 'scale=if(gte(iw\,ih)\,min(1920\,iw)\,-2):if(lt(iw\,ih)\,min(1920\,ih)\,-2)' -movflags +faststart -c:a aac -b:a 160k output.mp4
libx264 の代わりに h264_nvenc を使用した場合に最も近いものは何でしょうか?
答え1
以下の前提でこれらのコマンドを試してください。
i. NVENC用に選択されたデフォルトのGPUは であり0
、GPUはNVENCに対応しています。これ対応 NVIDIA ハードウェア上の FFmpeg で利用可能なハードウェア アクセラレーション インフラストラクチャを含む、NVENC 機能の詳細については、 を参照してください。NVDEC ハードウェア アクセラレーションによる GPU の選択は、グローバル オプション で切り替えられ-hwaccel_device 0
、エンコーダーの場合はh264_nvenc
のプライベート コーデック オプションで切り替えられます-gpu 0
。マルチ GPU システムでは、 にリストされている有効な GPU を選択しますnvidia-smi
。
ii. スケーリング操作は、純粋にGPU上で実行されるため、scale_npp
ORのいずれかで実行されます。これらのフィルターの可用性は、scale_cuda
どうやってFFmpeg は以下のように設定されています。 それぞれの使いやすさについては、ffmpeg -h filter=scale_npp
とを参照してくださいffmpeg -h filter=scale_cuda
。
nv-video-info
iii. 特定のコーデックに対するハードウェアアクセラレーションのサポートは、プラットフォームとドライバに依存します。これらは、Philip Langdaleのプロジェクトのnvdecinfo
プログラムで確認できます。これLinuxをお使いの場合は、ないすべてのビデオ形式は NVDEC によってサポートされているため、ソフトウェアベースのデコードへのフォールバックが提供されます。
iv. レート制御には、可変ビットレート モード (プライベート コーデック オプション で設定-rc:v vbr
) を選択し、一定品質パラメータ レート制御の値を 21 に設定しました。NVENC の有効な値は 0 ~ 51 です-b:v 0
。NVENC で選択したレート制御モードの制約に従うために、ビットレートは で明示的に設定解除されています。ただし、最大ビットレートとバッファ サイズは の設定に合わせて設定されたままですlibx264
。これこれらのパラメータが選択された理由についての回答。
v. ビルドされた FFmpeg の特定のバージョンと、使用されているヘッダー パッケージのバージョンffnvcodec
(リリース バージョンまたは git マスターのいずれか) に応じて、次のパラメータを変更する必要があります。(i)。ffnvcodec
ヘッダー パッケージの古いリリース バージョンで構成された FFmpeg の古いリリース ビルドのレート制御モードでは、を介してレート制御オプションを固定ビットレートに変更するだけで済みます-rc:v vbr_hq
。プリセット名は変更されません。
(ii) ヘッダー パッケージの現在の git バージョンと一致する git からの現在の FFmpeg ビルドの場合ffnvcodec
、レート制御のパラメーター ( で設定rc:v vbr
) は、固定ビットレート モードに設定され、名前付きプリセット ( で設定-preset:v p{1-7}
) とペアになっている必要があります。プリセットの範囲はp1
(最速) からp7
(最低速) までで、有効なチューニング オプション ( で設定-tune:v
) は、値の範囲は次のとおりです。
hq 1 E..V...... High quality
ll 2 E..V...... Low latency
ull 3 E..V...... Ultra low latency
lossless 4 E..V...... Lossless
FFmpeg のコマンドラインでチューニング値を完全な名前 ( ll
~ ) で置き換えることも、上記のようにチューニングlossless
値を識別する番号 ( 1
~ ) で置き換えることもできます。4
h264_nvenc
参考までに、エンコーダー ラッパーのヘルプ オプションで出力されるパラメーターを次に示します。
- 現在の FFmpeg ビルド:
ffmpeg -h encoder=h264_nvenc
Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
General capabilities: delay hardware
Threading capabilities: none
Supported hardware devices: cuda cuda
Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda
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 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)
-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 ビルド:
ffmpeg -h encoder=h264_nvenc
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....
次に、使用するパラメータについて説明します。
1. FFmpeg をフルハードウェアアクセラレーションデコードで使用nvdec
:
(a) スケーリングはファイラーで行われ、FFmpeg が独自の CUDA SDK でビルドされている場合に利用できます (ビルド時にscale_npp
フラグ--enable-nonfree --enable-cuda-nvcc --nvccflags="-gencode arch=compute_52,code=sm_52 -O2"
が渡された場合)。./configure
古いビルド:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_npp=w=1920:h=1080:interp_algo=lanczos' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
現在のビルド:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_npp=w=1920:h=1080:interp_algo=lanczos' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
(b) スケーリングはフィルタを使用して行われscale_cuda
、FFmpeg が clang バックエンドをnvcc
ジェネレータとして構成してビルドされている場合に利用できますllvm
(ビルド時にフラグ--enable-cuda-llvm --nvccflags="--cuda-gpu-arch=sm_52 -O2"
が渡された場合./configure
)。
古いビルド:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_cuda=w=1920:h=1080' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
現在のビルド:
ffmpeg -threads 1 -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda -i input.avi \
-vf 'scale_cuda=w=1920:h=1080' -c:v h264_nvenc \
-gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 \
-b:v 0 -maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
2. ソフトウェアベースのデコードフォールバックを使用する:
hwupload_cuda=0
GPU の割り当ては、すべてのスケーリング操作に対して GPU 0 にバインドされた CUDA HWContext を初期化するフィルターを介して行われ、h264_nvenc
エンコーダー ラッパーの場合はプライベート オプションが-gpu:v 0
続くことに注意してください。
(a).scale_npp
フィルターの使用:
古いビルド:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_npp=w=1920:h=1080:interp_algo=lanczos' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
現在のビルド:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_npp=w=1920:h=1080:interp_algo=lanczos' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
(b).scale_cuda
フィルターの使用:
古いビルド:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_cuda=w=1920:h=1080' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -preset:v fast -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
現在のビルド:
ffmpeg -threads 2 -i input.avi -vf 'hwupload_cuda=0,scale_cuda=w=1920:h=1080' \
-c:v h264_nvenc -gpu:v 0 -cq:v 21 -rc:v vbr -tune:v ll -preset:v p1 -b:v 0 \
-maxrate:v 5000K -bufsize:v 5000K -c:a aac -b:a 160k -movflags +faststart -f mp4 output.mp4
ぜひテストして結果を報告してください。