封装格式和编码格式
视频文件封装格式(扩展名)和视频编码格式(压缩算法)是两个不同的概念。
无损视频的码率(每秒的大小)是非常大的,因为其准确记录每个像素点的信息。比如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则更好
一些参考:
视频流硬件编码
现代电脑独立显卡/核显上通常包含用来编解码视频流的硬件电路。
硬编码比软编解码(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,可以图形化调整参数,挺方便。