压制玄学2020 - 编码器压制速度作弊与反作弊

A@NAZOrip
A@NAZOrip 2020年09月25日
  • 在其它设备中阅读本文章
前言:

本文称为玄学是因为没有做严格证明,数据上缺乏基础支持,但实践能轻松再现此原理。
初始现象:x264 crf模式录屏,在不同环境下的cpu占用完全不一样,例如r5 2600 4Ghz,3200mhz CL15 2x8G下:

  • x264录制Windows桌面占用6%
  • x264录制下图占用就达到12%

效果1.jpg(图库已炸,找不回来了...)

  • 57~60fps录制高动态高细节的占用达到了35%

效果2.jpg(图库已炸,找不回来了...)

  • 考虑到视频压缩通常会占据100%的cpu算力,所以被迫降低的自然就是压制速度(fps)了
推论:
  1. 不同视频的压缩难度不一样,复杂度决定了压制速度
  2. 复杂度一般分为时域,空域两个复杂度,但根据简单与复杂的面积比例,所以应当在分出前景,背景两种范围
  3. 网络数据不能当做到了自己手上的实际压制速度,因为不知道测试用了什么视频,什么复杂度,GOP多长,分辨率,压制同时用了什么滤镜/渲染
作弊:
  1. 使用复杂度低的视频得出编码占用/速度,对比其他复杂度高视频得出的编码占用/速度,最后只在表格上写1440p,1080p,720p,忽略掉没用的信息,就能得到显著的数据提升
  2. 使用草率处理背景的编码器,对比通用的编码器,喂背景简单的视频,得出手机能录4k 60fps,画质一样好的可再现结论
反作弊:
  • 综合上地,将视频编码难度标准划分为简单,普通,困难;以下是例子,但建议评测业界或视频编码业界自己制定
  • 将Closed GOP作为标准帧序列,规定I,i,P,B和b五种帧简单,普通,困难的使用方式:

简单--keyint <3xfps> --min-keyint <=keyint> --b-adapt 1 --bframes 5
普通--keyint <3xfps> --min-keyint <=kynt÷2> --b-adapt 2 --bframes 12
困难--keyint <4xfps> --min-keyint 1 --b-adapt 2 --bframes 16

  • 将压缩难度划分为前景时域,前景空域,背景时域和背景空域四个复杂度,排列出简单,普通和困难的视频:
!简单前景背景!普通前景背景!困难前景背景
空间复杂度复杂一般-复杂复杂-一般一般
时间复杂度一般一般-一般一般-复杂复杂
  • 具体的计算强度应有跑分做指标,如cinebench,handbrake跑分
  • 不应该刻意增加复杂度,因为大多数视频编码可能连普通都达不到
简单的办法:
  • 由于Netflix提供Sol_Levante的原盘在时域空域复杂度极高,而且还有4k 4:4:4的色彩空间。用它测量实际的编码速度和算法质量可以有效试水。还解决了低成本动漫的画面总因为容易压缩而看不出区别的漏洞,给这些地方截图和源作对比是看不出来区别的

那么就这样($^%&^)*_#=)(&%&(