有没有办法在不增加比特率的情况下提高输出质量?此外,有没有办法使用 提高代码质量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)
答案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 帧。