我有一个Nvidia显卡,并且正在使用专有的驱动程序。
我查看了可供我使用的ffmpeg H265编码器,发现了hevc_nvenc。使用hevc_nvenc实际上使用GPU对视频进行编码,这大大增加了编码时间,但是输出文件的大小要大得多。
例如:(input.mp4是H264和aac)
ffmpeg -hwaccel cuda -i input.mp4 -c:v libx265 -c:a libopus -crf 26 libx265_output.mkv
ffmpeg -hwaccel cuda -i input.mp4 -c:v hevc_nvenc -c:a libopus -crf 26 hevc_nvenc_output.mkv
文件大小如下:
input.mp4 351M
libx265_output.mkv 134M
hevc_nvenc_output.mkv 360MFf探头将输出显示为hevc编码,输入显示为h264。
那么,为什么hevc_nvenc表现得如此糟糕呢?一定有什么东西我错过了。
发布于 2021-11-13 03:08:43
硬件加速编码器不支持恒定速率因子(CRF,-crf)来确定大小/质量比。您可以检查编码器支持什么,例如使用ffmpeg -h encoder=hevc_nvenc -hide_banner。丹尼斯·蒙盖伊的详细答复 to '如何在ffmpeg中与nvenc一起使用CRF编码?‘at超级用户建议使用-cq:v 19和-rc:v vbr参数来获得可变比特率的恒定质量。在你的案子里,你可能会考虑这样做来帮助你。
值得注意的是,这仍然不同于CRF,因为常数质量是由-cq决定的,因此设置了常数量化参数(CQP)。下面引用通用报告格式指南Werner Robitza的话,解释为什么相对于设置常量QP,CRF仍然允许保存位数:
…量化参数定义从给定的像素块(宏块)中丢弃多少信息。这通常会导致整个序列的比特率有很大的变化。恒速因子比这要复杂一些。它会以不同的量压缩不同的帧,从而根据需要改变QP,以保持一定的感知质量水平。它是通过考虑运动来做到这一点的。…
ffmpegwiki断言表示这是典型的硬件加速编码:
硬件编码器通常比x264这样的优秀软件编码器生成的输出质量要低得多,但通常速度更快,而且不需要占用太多的CPU资源。(也就是说,它们需要较高的比特率才能使输出具有相同的感知质量,或者以相同的比特率使输出具有较低的感知质量。)
Peter建议将以下解释作为他在视频制作栈交换中的回答‘为什么处理器在编码方面比GPU“更好”?’的一部分:
我的理解是,视频编码的搜索空间是如此之大,以至于在CPU上提前终止搜索路径的智能启发式方法超过了GPU带来的暴力效果,至少对于高质量的编码是如此。它只是与
-preset ultrafast相比,您可以合理地选择HW编码而不是x264,特别是。如果您有一个缓慢的CPU (像笔记本电脑双核,没有超线程)。在快速CPU (i7四核超线程)上,x264superfast可能会更快,看起来也会更好(以相同的比特率计算)。如果您正在生成一个速率失真(每个文件大小的质量)重要的编码,则应该使用x264-preset medium或更慢一些。如果您正在归档某个文件,那么现在花费更多的CPU时间将节省字节,只要您将该文件保存在周围。
发布于 2022-12-31 14:01:31
ffmpeg -h encoder=hevc_nvenc
给出您的实际预置列表。
-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....... lossless
losslesshp 11 E..V....... lossless hp
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)https://unix.stackexchange.com/questions/677314
复制相似问题