关于压制视频

我用的视频编码格式、硬编码、转码工具

封装格式和编码格式

视频文件封装格式(扩展名)和视频编码格式(压缩算法)是两个不同的概念。

无损视频的码率(每秒的大小)是非常大的,因为其准确记录每个像素点的信息。比如1080p 60帧的视频的码率是是3.73 Gbps,即一分钟的视频27G。一般都会对画面进行有损压缩再记录,这样可以极大的减小体积方便储存。压缩使用的算法就是一种视频编码格式

同理,声音也会经过编码被记录下来。由于声音的数据量较小,可以使用有损或无损压缩。编码声音所用的方法就是音频编码格式

视频和音频分别经过编码,称为媒体流。将视频流、音频流和字幕、元数据等额外的信息以一种特定的方式打包在一起,这种打包方式称为视频文件封装格式

常见的视频编码格式:

名称 压缩效果 硬件编解码兼容性
H.264 / AVC 一般 几乎所有设备都支持
H.265 / HEVC 中等 近几年的设备都支持
VP9 中等 近几年的设备都支持
AV1 最新一代个别设备支持

常见的音频编码格式:WAV(无损编码), AAC, MP3, 等等

常见视频文件封装格式:mp4, mkv 等等

码率控制方式

码率(mbps)可以理解为视频每秒钟所占的磁盘空间。前面提到,视频通常采用有损压缩。在编码格式相同的情况下,可以简单的用码率衡量画质。

以下四张图,从左往右为同一个视频用四个不同的码率压制。可以很明显的看出,右边的由于码率给的太低,已经有明显的模糊和色块。

码率对比

对于较为静态的画面(比如录制的办公软件操作),大量区域时间上前后重复,所以码率需求较低。相反,对于动态画面(比如游戏画面),码率需求较高。

对于有大块色块的画面(比如番剧、2d动画),一帧中的大量区域颜色相似,所以码率需求较低。相反,对于有大量噪点、特效、光影的画面(比如极暗环境下手机拍摄的大量噪点的视频),码率需求较高。

在编码视频时,有四种常用的控制码率的方法:

  • CBR:恒定码率,在静态画面时码率过剩,而在动态画面时码率不足让画面很糊
  • VBR:可变码率,允许动态分配码率,给大量动态内容的部分分配更多的码率。可以指定目标输出码率。使用VBR 2PASS会进行两次编码,用第一次编码的数据进一步调整码率的分配以达到更好的效果。
  • CQP:恒定每一帧的画面质量,无法指定输出码率
  • CRF:恒定视觉质量,无法指定输出码率。类似于CQP,但是可以通过降低 过于耗费码率又难以用肉眼察觉的帧 的质量,把码率分配给其它更有效的帧

对于要上传到流媒体网站的视频,通常采用VBR 2PASS编码可以获得最好的画质,因为视频网站通常有码率限制

对于收藏存档的视频,使用CQP或者CRF则更好

一些参考:

https://bbs.itzmx.com/thread-89019-1-1.html

https://www.bilibili.com/read/cv4086838/

视频流硬件编码

现代电脑独立显卡/核显上通常包含用来编解码视频流的硬件电路。

硬编码比软编解码(CPU)快得多,效果取决于硬件电路,比软编码差,但在逐代改善。

以下是几个常用的视频流编解码器:

  • x264/x265: CPU编码器
  • QSV: Intel编解码器
  • AMF: AMD编解码器
  • NVDEC/NVENC: 英伟达解码/编码器

通常来说,在同等文件大小前提下,硬编码质量Intel>Nvidia>AMD新硬件>老硬件。比如同等文件大小下我自己的**UHD730显著比RTX2060编码质量要好**,但是速度稍慢。

降噪

相机的无规律噪点很难被压缩。在高噪点环境下,使用hqdn3d降噪滤镜可极大的减小文件体积,提高画面质量。

具体内容参考这里:

https://mattgadient.com/in-depth-look-at-de-noising-in-handbrake-with-imagevideo-examples/

转码工具

  • FFmpeg: 免费开源的命令行转码工具,大量同类工具基于它封装
  • HandBrake: 基于FFmpeg封装的开源图形化转码工具,支持硬编码
  • ShanaEncoder: 基于FFmpeg封装的开源图形化转码工具,支持硬编码
  • Mediacodec: 收费视频转码工具,找不到最新的支持硬编码的开心版
  • 格式工厂: 基于FFmpeg封装的国产转码工具
  • 小丸工具箱: 基于FFmpeg封装的国产转码工具

我使用的方案

软硬件:

  • 12400, UHD730硬编码
  • Win10 22H2
  • ShanaEncoder

我的压制参数(仅代表我手上设备的情况,挑选出的观感较好、文件大小合适的画质)

  • 录屏,均为2K60fps h265
    • 原神录屏,较为静态的画面,ICQ30,平均5~8mbps
    • 原神录屏,动态战斗的画面,ICQ30,平均17mbps
    • 只狼录屏,动态战斗的画面,ICQ26,平均17mbps
    • 办公软件录屏,静态画面,ICQ30,平均0.7mbps
  • 录像,均为1080p30fps h265 hqdn3d 3:2:2:3
    • 一般室内环境,较为静态的画面,ICQ22,平均2~3mbps
    • 一般室内环境,手持相机走路无防抖,ICQ22,平均12mbps

结论:

  • 2K录屏开ICQ30能感觉到是视频,视频的单帧截图含有明显压缩痕迹,动作不大的视频播放起来效果还行,空间大小也能承受,用来存档不错。可以适当的调整以获得更好的画质。
  • 对于相机录像,开一点降噪可以极大减小文件体积,但是高降噪和低降噪区别不大。

我这里HandBrake在使用UHD730编码H265时会在关键帧处闪烁,似乎无法把前后两个关键帧区间连接起来。所以我选择使用套壳FFmpeg的ShanaEncoder,可以图形化调整参数,挺方便。