FFMPEG视频编码 NVIDIA 和 INTEL 硬件加速 x265 8bit 和 10bit

现在的显卡和两年前已经不一样。
从 NVIDIA 显卡的能力表来看,新卡 1070 支持 x265 10bit 编码。
正好最近有需求,来研究一下。
CPU也不一样了,现在是 i7-8750H, 顺便研究 intel 显卡硬件编码 x265。
FFMPEG 也不一样了,现在可以支持更多编码参数了。


2021-4-17 更新


ffmpeg -codecs | sls cuvid
检查ffmpeg是否支持 nvenc 转码

ffmpeg -h encoder=hevc_nvenc
检查 x265 nvenc 的可以使用的选项


在同等文件大小情况下,仍然是CPU编码的质量最好,但两者差别不大。同时,码率越高,CPU编码和nvenc编码两者差别质量越少。
例如一部 13G 1080P 你的名字 蓝光电影,分别使用 CPU 和 nvenc 压到 3500K,两者差别几乎是肉眼不可分辨的。
简单的速度比较
一段影片,i7 8750H; GTX 1070
hevc		编码速度为 0.1X
hevc_nvenc	编码速度为 5.1X



使用平均码率控制模式,建议使用这个,因为这个比较方便调整输出视频大小

ffmpeg -i 1.mkv -b:v 3500K -bufsize 6000K -maxrate 5000K -c:v hevc_nvenc -preset slow -pix_fmt p010le -profile:v rext -level 6.2 -tier high -rc vbr_hq -rc-lookahead 250 -2pass 1 -nonref_p 1 2.mkv
转码 1.mkv 到 2.mkv
设定
-b:v 3500K			视频平均比特率为 3500K
-bufsize 6000K		缓存区大小 6000K,建议设定为 当前码率*帧率*5,也许这里的2pass是针对缓冲区的,缓存未来5s
-maxrate 5000K		最大码率为 5000K,每帧的最高码率不超过这个数值
-c:v hevc_nvenc		使用hevc_nvenc 编码器(nvidia硬件加速x265)
-preset slow		预设方案是 slow,slow已经是最好的选项了
-pix_fmt p010le		输出的像素格式是 p010le 也就10bit,只有新的硬件支持,例如:970m不支持,1070可以支持
-profile:v rext		设定 参考配置 为 rext,这个也是最好的选项
-level 6.2			设定编码等级为6.2,这个也是最好的选项
-tier high			设定 tier 为 high,当前最好选项把
-rc vbr_hq			设定质量控制类型为 vbr_hq
-rc-lookahead 250	前 250 帧作为码率控制的参数(貌似没用)
-2pass 1			使用 2pass 编码,但看不出什么差别,貌似没用
-nonref_p 1			使用自动插入无引用的P帧,不知道干嘛的


如果要8bit的编码可以删掉上面的 -pix_fmt p010le 参数 再执行。

# 2021年4月后的FFMPEG
ffmpeg -i .\1.mkv -b:v 4000K -bufsize 16000K -maxrate 8000K -c:v hevc_nvenc -preset p7 -tune hq -pix_fmt p010le -profile:v rext -level 6.2 -tier high -multipass 2 -rc-lookahead 1800 2.mkv
这个参数用来转换9g h264的电影,可能会不错


ffmpeg.exe -i 1.mkv -b:v 2200K -bufsize 16000K -maxrate 3000K -c:v hevc_nvenc -preset p7 -tune hq -pix_fmt p010le -profile:v rext -level 6.2 -tier high  -multipass 2 -rc-lookahead 1800 -c:a aac -b:a 128K .\2.mkv


# 过时,2020年的FFMPEG
ffmpeg -i .\1.mkv -b:v 4000K -bufsize 16000K -maxrate 8000K -c:v hevc_nvenc -preset slow -pix_fmt p010le -profile:v rext -level 6.2 -tier high -rc vbr_hq -rc-lookahead 1800 2.mkv
这个参数用来转换9g h264的电影,可能会不错


使用固定qp模式,也就是固定质量模式,此时输出文件大小不怎么好估计,不是很关心文件大小可以用这个

ffmpeg -y -i 1.mkv -c:v hevc_nvenc -preset p7 -profile:v rext -level 6.2 -tier high -rc constqp -qp 23 -nonref_p 1 2.mkv
这里基本与上面相同,不同的是这里使用固定质量模式
-rc constqp			代表使用固定质量模式
-qp 23				使用固定质量等级为23


2020-12-7 更新

ffmpeg -codecs | sls qsv
检查ffmpeg是否支持 qsv 转码

ffmpeg -h encoder=hevc_qsv
检查 x265 qsv 的可以使用的选项


目前不建议使用hevc_qsv编码图像,因为在同等文件大小下,hevc_nvenc 编码的速度更快,并且质量更好。
简单的速度比较
一段影片,i7 8750H
hevc		编码速度为 0.1X
hevc_qsv	编码速度为 1.1X


使用平均编码模式

ffmpeg -i 1.mkv -b:v 3500K -bufsize 6000K -maxrate 5000K -vcodec hevc_qsv -preset slow -pix_fmt p010le -profile:v main10 2.mkv
转码 1.mkv 到 2.mkv
设定
-b:v 3500K			视频平均比特率为 3500K
-bufsize 6000K		缓存区大小 6000K,建议设定为 当前码率*帧率*5,也许这里的2pass是针对缓冲区的,缓存未来5s
-maxrate 5000K		最大码率为 5000K,每帧的最高码率不超过这个数值
-c:v hevc_qsv		使用 hevc_qsv 编码器(intel硬件加速x265)
-preset slow		预设方案是 slow,在我这里无法使用更高选项,但使用更高的选项会报错
-pix_fmt p010le		输出的像素格式是 p010le 也就10bit
-profile:v main10	设定 参考配置 为 main10,有rext选项,但无法使用,因为会报错

如果要8bit的编码可以删掉上面的 -pix_fmt p010le 和 -profile:v main10 参数 再执行。
或者把对应参数改成 -pix_fmt nv12 和 -profile:v main ,效果和上面一样。



目前 hevc_qsv 不支持CQP编码模式

你可能感兴趣的:(音视频压制经验,ffmpeg,x265,10bit,视频编码)