压片时用 CPU 和 GPU 效果差异很大吗?

2020-07-02 13:53:15 +08:00
 zhangsimon
如果用 H.265 标准压片
都知道 GPU 相对 CPU 的速度是有显著增益的
但搜了下有说 GPU 出来的画质差 CPU 画质很多
也有说差异不大的
说画质差异大的:把码率稍微调高点,两者画质差异就不大了

所以画质上,上面的理论哪个更准?


还有就是 N 卡阵营里,1650Ti 和 2060,压片速度有多大差异?
11966 次点击
所在节点    问与答
82 条回复
sugarsalt
2020-07-03 00:48:04 +08:00
是骡子是马拉出来溜溜呗,差异是有的,有多大,值不值,你自己各压一遍比比就知道了
helloworld000
2020-07-03 05:21:20 +08:00
这种帖子都能讨论这么多也是醉了


压缩居然还讨论硬件而不是具体代码 api 实现



v2ex 现在是主流是电脑城小哥?
ungrown
2020-07-03 08:14:26 +08:00
首先又到了小马过河的环节,这种时候我一向主张都是优先注重自己实践的结果。

但楼主是来为选型求信息的,那我把个人经验说一说。

不太严谨地说,你可以把任何硬件编码器当成一个阉割版的编码器。区别是,阉割到什么程度,尤其是在它的目标工作场景中,相比它的工作所需要的特性,它被阉割到什么程度。

所以硬件编码器、或者硬件加速编码器,一定是牺牲一些特性的。而软件编码器中的诸多特性,都是为了提高编码效率,用尽可能小的码率实现尽可能高的画质。

硬件编码器每被阉割一个特性,就缺失了相应的算法,同码率下画质就更差,或者同画质下码率就更高。

很多年前尝试过 N 卡的硬件编码,速度快到怀疑人生,画质糊到怀疑眼睛,码率高到怀疑它是不是真的在做“压缩”而不是“扩大”。

平时不会考虑硬件编码(指 PC 上的任务,手机上由不得我选择,基本都是硬件加速),因为我压片给自己收藏是为了减小体积。但如果一定要用的话,我基本只选 intel 的 qsv 。

qsv 对于个人用户、单任务场景而言,相当优秀,画质相当凑合(一眼看去不会骂娘),码率相当凑合,速度贼快。

但如果你需要大批量多任务加速,可能 qsv 不太行。但目前 AN 两家硬件加速编码我没有经验,你得问别人,或者问其他地方。(英文互联网这类信息不会缺少,建议 Google 搜)
fnscar
2020-07-03 08:44:09 +08:00
1650super 是内置 turing nvenc chip 的显卡里最便宜的。
1650 的 gpu 是 turing 但 nvenc 是 volta 。注意别买错了。
1070/1080 虽然有 2 片 nvenc chip,从 nvidia 论坛里的反馈来看速度是只有 1 片 chip 的 turing 卡的两倍,但不支持 B 帧,压缩效率不如新的 turing 卡。
软件直接用 rigaya 的 nvencC,参数最丰富,比 ffmpeg 的 libnvenc 好用。
rigaya 的博客里也有 nvenc 、qsv 、vce 、x264 、x265 的对比。
stoneabc
2020-07-03 08:58:02 +08:00
@helloworld000 那就请教一下,nvenc 的具体代码实现在哪?
newmlp
2020-07-03 09:29:06 +08:00
如果参数一样效果理论上一样,但是 GPU 压片可调参数有限,所以 CPU 压片质量高很多
expy
2020-07-03 09:37:50 +08:00
编码好像是用的专用芯片,不是跑在 cuda 上。1650 super 及以上都是一样的图灵版 NVENC 芯片。

"One thing that is great about NVENC on the GeForce RTX 20-series and GeForce GTX 1650 Super and up is that all GPUs have the same NVENC with the same performance and quality, from the RTX 2060 to the RTX 2080 Ti. NVENC also benefits from our own NVIDIA Video Codec SDK, an advanced set of tools that help improve the encoded quality and that we constantly update to help you get the best out of your NVIDIA card."

https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/
expy
2020-07-03 09:42:39 +08:00
这里有游戏直播推流用的各种编码器测试。码率给到 8Mbps,图灵 NVENC 编码 hevc 效果很好。

https://unrealaussies.com/tech/nvenc-x264-quicksync-qsv-vp9-av1/
supuwoerc
2020-07-03 10:16:12 +08:00
学到了,我也以为一样的参数和方法 ,不同产出者的不会存在差别呢。。
idealhs
2020-07-03 10:35:45 +08:00
@May725 不懂装最懂的,怕是耳机也没听过几个,视频也没压过几个。
Jasmine2016
2020-07-03 11:02:05 +08:00
所以。。。楼主你有答案了吗?我看的大家的回复也比较蒙。我也是只想要节省压片速度,画质不过分追求。
Mark24
2020-07-03 11:05:20 +08:00
哈哈哈,好几个人是不懂装懂,想当然了。

楼主既然得到了有差异的结果——其中必有原因。

等大神分析原理。也是很好奇
mxT52CRuqR6o5
2020-07-03 11:48:11 +08:00
显卡硬件编码能控制的参数有限,做不到一样的参数,而且编码的硬件代码在电路造出来后也不可能改了
软件编码可以不断的优化算法,有些编码格式可能还有多个不同组织写的编码器,相同参数不同版本的软件编码器可能出来的文件就不一样哦
mortal
2020-07-03 12:34:07 +08:00
@zhangsimon #58

这是有 Turing NVENC 最便宜的卡,是 TU116 核心。1650 Super 和 1650 不一样,后者是 TU117 。另外,没有 1650Ti 这款卡。“1*” 的 * 是注释的意思,表格下面写了:

* = Turing GPU with Volta NVENC
realpg
2020-07-03 13:48:42 +08:00
@libook #10
一本正经的胡说八道系列
@libook #11
补充的 胡说八道 PLUS

@zhangsimon #17
NVENC 只有一个核心 是一个独立芯片
同核心的不同显卡 转码性能一致,除非同时在做别的任务高负载,显存频率和显存容量拖后腿。

如果你单纯的追求转码速度,那 NVENC 就完事了,最新一代的核心的,注意 16xx 系列好像有一个入门型号用的旧版本 NVENC
专业卡和游戏卡的 NVENC 一样,但是并发任务数不一样。专业卡好像是可以同时压 4 路,游戏卡只能一路。
xsen
2020-07-03 13:52:28 +08:00
拿 h264 来说,若一样的算法,那么 CPU 、GPU 或硬件编解码芯片,参数一致的话画质可以说可以是完全一样的
唯一区别就是体现在对资源的占用——就是时间相关的(如编解码时间、延迟、帧率这些)

但实际上,对于 CPU 、GPU 及编解码芯片算法层面还是有比较大的差异,
1. CPU
软编解码,用的都是比较成熟的、通用的算法。一般是 x264/openh264

2. GPU
如拿 nvidia 的 GPU 来说,实际上支持视频的编解码的时间并不算太长远。因此,因此算法的成熟度这块肯定是不如 x264/openh264 这些。所以一样的参数,画质有不同是正常的情况

GPU 做视频编解码,主要也就是近几年才慢慢普及起来的

3. 专用的视频编解码芯片
一般我们说的手机或机顶盒的硬编、硬解就是指的是这类专用芯片。这类芯片用的算法,都是非常成熟的、商用的算法(专用的)。其整个周期与 x264/openh264 同步发展

基本 h264 标准尚在制定阶段,做视频编解码芯片的厂家就在同步实现算法,或比标准还要早


因此,对于画质来说,专用视频编解码芯片的画质质量与编解码速度是最好的,但不够灵活(支持算法是固定的)
对于软编软解,因为是同步用的最新的算法,所以画质不会太差,但占用 CPU 资源

对于 GPU 做视频编解码,出来时间并不长,所以算法不够成熟(或优化度不够),但好处在于灵活(可以实现各种的算法——音视频、图形、图像等等)
zhangsimon
2020-07-03 14:03:28 +08:00
@Jasmine2016 有答案了
单说显卡压制能力:N 卡选 turning 构架的显卡,转码就看参数里的 nvenc 的数量;
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder
所以 Geforce 系列里其实 1660 到 2080 的视频转码能力没差异

如果你只做转码,1650S 是最便宜的一款
( 1650 是 turning 里最便宜的那块,但是 nvenc 没升级; 1650s 的 nvenc 是升级过的)

综上:我准备蹲个联想 R700 的 1660Ti 版 👀
进可打打游戏,退可压压视频
zhangsimon
2020-07-03 14:05:04 +08:00
@mortal Got,🙏多谢科普
futou
2020-07-03 17:43:30 +08:00
看到很多人对编码结果不同有疑惑,实际上我们平时叫 h.264/h.265 为“编码标准”是不严谨的,严格意义上来说这些都是“解码标准”。

解码标准间接限定了块划分结构、帧内帧间预测等编码模式,但限定不了如何在大量候选模式中选出最优的一组进行编码。因此,不同编码器有不同的编码模式优化选择算法,也就产出不同的编码性能(速度、压缩比、质量)。

所以,即使能控制不同编码器使用完全一致的参数进行编码,结果也是不同的。
ungrown
2022-03-01 03:39:43 +08:00
@happinessnch #40
你的发言佐证了我一直以来的一种观点:专业人士很容易把自己的知识技能经验外扩到自己的专业之外,而现如今是一个“专业割裂”严重的时代,同领域同场景下看似同专业实则不然的情况太常见了,很反直觉是吧。
我们看看视频编码本质上是个什么运算,在如今仍然主流的基于像素块的编码思路下,无非是在二维矩阵上搜索、跟踪大量的像素群是如何随着时间移动、变化的,并将这些运动用尽量少的数据描述出来。这部分工作就是运动预测、运动补偿,除此之外的工作,诸如量化、采样、宏块切割、滤波、频域转换、熵编码(无损压缩)等等基础计算虽然同样重要但并不是影响最终编码效率的关键因素、或者虽然也是关键因素但影响比重明显小于运动预测。
那么,如何高效、准确地进行运动预测?最理想的情况是,在整个画面上进行搜索跟踪。但这就带来一个“负担”,这么大的矩阵是要占用不小的运行内存空间的。
如果是 CPU 跑编码算法无所谓,大把的内存条,空间管够,反正就一个计算单元,整个图像范围由它承包。一个运算单元负责一整个图像,而且现代 CPU 性能强劲,在强力的分支预测加持下,视频编码算法中大量的分支条件判断压根不算个事。
GPU 就惨了,一堆运算单元,却个个都是残废,光是一个 if-else 就够这些单元跑半天了,这些单元也就只能胜任某几种模式的数值计算罢了,让它们进行复杂逻辑判断真是要了亲命。那么单核心这么弱,是不是得把工作分一分啊,那肯定啊。那咋分呢,每个 GPU 运算单元该复杂多大范围呢?负责的范围太小的话不行,这个单元上一帧还能看到画面上那只手呢,下一帧这手直接移动到它负责的范围外面了,它直接懵逼,顺带它隔壁的单元也跟着懵逼,咋我的工作区里多出来一只手,我之前跟踪着的那只眼镜呢?那么范围大一点行不,要不干脆直接大到一整个画面范围得了,反正一帧画面是大家共用的嘛,又不用多占空间?不行,画面数据是公用的,但每个单元负责的任务数据是独有的,每个单元负责的范围越大,它要分辨的数据量就越大,它能识别并跟踪的目标就越大,目标运动范围、运动模式就更复杂,记录这些数据需要的空间就更更更大,字面意义上的几何式增长。显存一共才多大啊,就算它 8 个 G ?几百几千个核心等着分呢,笑死,根本不够分。
那取个折中行不,也不整个画面范围了,也不弄得范围太小,取个过得去的中间值吧。行,事实上也是这么做的,然而即使如此,一旦跑起来,依然是内存直接拉满,但核心却依然有大量空闲。真没办法了,每个核心负责的单元不能太小,不然动不动丢失跟踪目标,没法玩。就这样,整个画面依然被划分成了不少的范围,一旦动起来,依然频繁出现目标从一个区块跑到另一个的情况,引起巨大的编码浪费,它们要真是直接瞬移过去的还好,关键是一帧一帧慢慢过去,中间的每一帧上,这些区块的边界上充斥了各种不完整的目标碎片,严重的能造成几倍的编码浪费。
所以大家都懂,都会玩,说是 GPU 硬件加速编码,其实负责编码运算的根本不是 GPU 核心,而是另外单独的专用视频编解码电路,核心撑死了帮忙做一些外围辅助工作,视频编码的大头工作全交给专用电路,intel qsv ,nvenc ,诸如此类,概莫如是。

所以,你当初参与的那个项目的那个算法,大概率是一个本来就针对并行计算特性所设计的模式,压根就不能发挥出 CPU 这种能胜任复杂任务的强力运算单元的优势,而更偏向于照顾 GPU 单元这种多而弱的运算架构,而且既然已经是针对并行运算所设计的视频编码算法,毫无疑问逃不开上面所述的“分割画面范围导致跟踪对象丢失引起大量冗余编码”的弱点,那自然是就算用了 CPU 来跑也不会得到更好的画面或者编码效率。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/686547

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX