视频转码硬核入门手册
视频转码其实是一个折衷解决方案:在满足视频分辨率、清晰度要求下,尽可以减少视频大小,以满足带宽和硬盘容量要求。此外还有对视频编码格式、视频格式转换,以满足播放要求。
常见视频转码操作有:视频编码格式转换、视频格式转换、高码率转低码率、高分辨率转低分辨率。
注意:转码大多属于不可逆操作,所以不要直接低分辨率转高分辨率、低码率转高码率,这等于制造视频垃圾。一些AI工具可以实现低分辨率转高分辨率、低码率转高码率,但目前效果不完美也是折衷解决方案。
视频格式、视频编码格式、视频码率
视频文件格式≠视频编码格式,下图案例是命名规范的视频文件:

从文件名可以得到信息:视频分辨率为2160p;视频采用了HEVC(H.265)编码;视频文件格式为mkv。其中HEVC就是视频编码格式,常见视频编码格式有:H.264(AVC)、H.265(HEVC)、AV1等。mkv是视频文件格式,常见视频文件格式有:MP4、MKV、WMV、AVI等。但并非所有视频文件命名都如此规范,所以需要一个更强大的工具MediaInfo:
媒体文件信息查看工具MediaInfo
MediaInfo是一个查看视频文件信息的工具。MediaInfo可以集成到Win系统的右键菜单,使用很方便。通过MediaInfo可以查看视频:分辨率、文件格式、视频和音频编码格式、视频帧率、视频码率等信息,十分详细和全面。

这里重点讲下“视频码率”这个概念。简单理解“码率”就是每秒钟视频数据量大小。理论上:相同视频编码格式,码率越高越清晰;视频编码格式越先进,相近清晰度的码率越小;码率转换不可逆,低码率视频无法还原成高码率视频。
视频码率推荐
理论上视频码率越高越好,但高码率对宽带和硬盘容量要求也大大提升。每个视频都收藏原盘有NAS都未必顶得住。视频编码格式的进步主要目的是为了优化视频的互联网传输,以较低低码率实现较高视频质量。下图是基于web传输的视频码率参考(原盘党对于这个码率自然不屑一顾):

视频压制质量检测
视频进行码率转换(压制)后,如何判断视频质量呢?如果压制不涉及分辨率和帧率,仅仅是对视频编码格式和码率进行转换。可以用VMAF这个工具来进行判断。VMAF是由Netflix开发的视频压制质量评价工具,需要同时有源文件和对比文件。ffmpeg已经集成了VMAF,可以通过命令行调用ffmpeg进行测试:
#1080P
ffmpeg
-i A.mp4
-i B.mp4
-lavfi libvmaf=log_fmt=json:log_path=output.json -f null -
#2160P
ffmpeg
-i A.mp4
-i B.mp4
-lavfi libvmaf=model=version=vmaf_4k_v0.6.1:log_fmt=json:log_path=output.json -f null -
但命令行检测毕竟不够直观,我给大家推荐一个带GUI界面的工具FFMetrics。FFMetrics是非常专业的视频质量对比工具,支持PSNR、SSIM、VMAF三个算法对比,且支持同时对比多个视频文件。PSNR、SSIM的资源占用很高,一般情况用VMAF即可。

转码工具Handbrake、ShanaEncoder
预备知识讲了这么多,进入“视频转码”的主题。
我推荐两个转码工具:Handbrake、ShanaEncoder。我平时用Handbrake较多,但也有人说ShanaEncoder更好用。用什么工具看自己喜好,视频转码离不开三个知识点:视频编码格式、视频码率、硬件编解码。
视频编码格式目前主流的有:H264、H265,AV1也在逐渐普及。前面提到过“视频编码格式越先进,相近清晰度的码率越小”,但是编码越先进越复杂对硬件要求也越高,所以选择视频编码格式要综合:压制效率和硬件普及度两个方面考虑。
至于码率,虽然我有推荐码率和视频压制质量检测工具,但实际操作时常常还是基于经验,压制多了就会有一套自己顺手的参数。新手压制时一般用默认参数,但是真正压制视频,码率这些重要参数还是要自己来控制的。

显卡硬转码支持情况
硬解码指的是显卡(或者解码芯片)通过硬件加速提升解码速度。在格式支持的情况硬解码比处理器软解码速度更快。如何查询显卡硬编解码的支持情况,可以用DXVA Checker这个工具进行测试:

更方便的做法是直接在DXVA Checker官网上,通过表格查找对应显卡的解码支持情况:
https://bluesky-soft.com/en/DXVAChecker.html

NAI三家显卡视频硬编解码速度和压制质量对比
为了折腾视频转码,我凑齐了:AMD核显、NVIDIA独显、Intel核显。至于H256硬解都不支持的硬件就没列出来了:

NAI三家里视频编解码支持最给力的是Intel;NVIDIA虽然不弱但很抠门(像GeForce 940MX、MX450这样的独显都阉割了视频编解码器);AMD则是相对较弱的。如果显卡支持支持硬解,可以大大提升视频编解码提升效率,如果没有显卡硬解,则会调用CPU进行软解,但软解十分吃CPU资源且速度不如硬解。
在使用Handbrake或ShanaEncoder进行转码时可以在设置中设定硬解码,其中QSV为Intel硬解、NVENC为Nvidia硬解、AMF/VCN为AMD硬解:


我剪辑了纪录片蓝色星球一个2160P分辨率8分钟片段用于测试,视频信息如图:

然后均使用Handbrake进行硬转码,转换成1080P分辨率、HEVC编码格式、5M可变码率的视频,然后对比转码速度和质量。
AMD选手5600G核显Vega7,转码速度实测,平均55帧:

Intel选手13900H ES核显Iris Xe,转码速度实测,平均120帧:

NVIDIA选手独显RTX2060S,转码速度实测,平均87帧:

NVIDIA选手计算卡Tesla P4,转码速度实测,平均55帧,但是Tesla P4其实有双路转码芯片所以其实还是有潜力可挖的(我们可以看到转码占用率很低):

各家显卡硬转码后,视频质量VMAF算法对比:

数据汇总的总表:

由此可见在视频编码转码上Intel核显确实具备明显优势,而AMD在视频转码上表现稍差,但由于没有AMD独显所以缺少更详细的测试。NVIDIA虽然在转码表现上不弱,但是皮衣刀客却非常抠门,甚至移动端上把GeForce、MX系列都阉割了视频编码器。
视频解码几大原则
视频转码大多是不可逆过程,所以视频源十分重要。所以那些本来为了节省硬盘空间的人,为了压制不得不找更好的片源,结果反而入了原盘的坑(这就叫得不偿失呀)
因为视频压制有几个原则:
低分辨率不能直接转高分辨率;
低码率不能直接转高码率;
视频编码格式、码率大小的优劣都是相对的,取决于硬件等实际情况;
在不考虑硬盘容量、带宽、资源的情况下,无疑原盘是最优解;
大部分人会用到编解码的情况还是看视频时实时解码,或者偶尔压制一些高码率视频存档。其实真正去折腾转码的概率并不多。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

灵KOYB
校验提示文案
wallywest
校验提示文案
EverettY
校验提示文案
EverettY
校验提示文案
wallywest
校验提示文案
灵KOYB
校验提示文案