现在的显卡和两年前已经不一样。
从 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编码模式