首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ffmpeg libx265诉hevc_nvenc

Ffmpeg libx265诉hevc_nvenc
EN

Unix & Linux用户
提问于 2021-11-13 02:58:07
回答 2查看 8.9K关注 0票数 2

我有一个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

文件大小如下:

代码语言:javascript
复制
input.mp4             351M
libx265_output.mkv    134M
hevc_nvenc_output.mkv 360M

Ff探头将输出显示为hevc编码,输入显示为h264。

那么,为什么hevc_nvenc表现得如此糟糕呢?一定有什么东西我错过了。

EN

回答 2

Unix & Linux用户

发布于 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四核超线程)上,x264 superfast可能会更快,看起来也会更好(以相同的比特率计算)。如果您正在生成一个速率失真(每个文件大小的质量)重要的编码,则应该使用x264 -preset medium或更慢一些。如果您正在归档某个文件,那么现在花费更多的CPU时间将节省字节,只要您将该文件保存在周围。

票数 3
EN

Unix & Linux用户

发布于 2022-12-31 14:01:31

ffmpeg -h encoder=hevc_nvenc

给出您的实际预置列表。

代码语言:javascript
复制
  -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)
票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/677314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档