论文部分内容阅读
编码之后还需解码
现在是数字时代,我们的视频内容一样也是数字存储,这和很久之前的模拟录像完全不同。既然是数字构成的,那么视频文件也和其他编程文件一样,需要通过机器语言“翻译”给电脑,用0、1这样的数字信号存储起来;电脑在播放视频的时候则是经过“翻译”,将这些数字“变回”视频画面,这个过程就是视频的编码一解码,英文称作Video Codec。其中,编码的工作称之为Encode,解码的工作则称之为Decode。
当然,笔者这样解释只不过是通俗易懂的方式,在视频编解码的过程中现在已经不仅只是负责“翻译”那么简单了。视频编码是压缩和可能改变视频内容格式的过程,首要作用自然是模拟源更改为数字源。在压缩方面,目标是减少占用空间。这使得它是一个有损的过程,会抛弃与视频相关的信息。在解压缩以进行回放时,创建原始的近似值。应用的压缩越多,抛弃的数据越多,近似值与原始数据相比差距越大。
提及有损,那就要提到编码了,正如《视频格式你真了解吗》一文提到的,诸如H.264、HEVC、VP9乃至AV1,都是通过不同的编码压缩方案对视频进行编码压缩,在尽可能保证视频素质本身的同时极力压缩视频容量。
最后,再经过不同文件格式(对应于编码方案)进行封装,这才有了我们常见的MKV、MP4、MOV等视频文件。
硬解码哪家强
在专用的视频播放设备中,自然有负责编解码的硬件,而在电脑上,这一切通常都要交付于GPU或者说显卡来进行计算,而不是CPU——通俗地讲使用GPU进行解码时,我们将其称之为“硬解”;使用CPU进行视频解码播放時,我们将其称之为“软解”。
本质上说,CPU硬解的视频画面还原水准是最好的,因为一切都由CPU进行“自由”计算,视频可以提供的色彩范围、压缩的视频信息,皆可——根据实际进行“还原”,但是,它会极度消耗系统资源,CPU很容就变成100%满载,根本无法兼顾其他必须的工作。而GPU硬解,相当于在GPU内预置了针对不同编码的“解决方案”。任务工作一来,GPU就会直接套用这些生硬的“操作流程”对视频进行解码还原。这样的好处自然是解码顺畅,效率更高、节约系统资源,不好的地方在于,它根本不顾及视频源本身的特质,如色彩等等方面的还原,只能“生搬硬套”——除非你可以手动调节。
目前市场上主流的GPU提供商无非就是NVIDIA、AMD和英特尔三家,它们无论是独显还是集成显卡,都对不同编码的视频方案提供了解码的“预置方案”,当然,因为年代不同,可能有些显卡并不能支持全部的视频编解码方案。一般而言,时下最为主流的H.264编码视频,近十年以来的GPU都可以支持;而HEVC(包括HEVC 10bit),则是近五年的GPU产品才能够提供完善的硬解能力。而日后最值得关注的AV1编码硬解能力,只有从去年发布的GPU产品中才能支持(也就是AMD Radeon RX6000系列、NVIDIA GeFroce RTX 3000系列及Intel 11代酷睿的核显GPU系列)。
笔者为此也整理了近十年GPU产品对视频的解码能力,将其附表于下,方便读者朋友们查阅。注意,这三个涉及NVIDIA、AMD和英特尔GPU硬解的表格仅仅针对解码规格,编码的区别并无涉及。
解码播放这样做就对了
光有GPU硬件解码还不够,需要软件来将机器语言翻译成真正的可视画面,这才能完成最后一步“观看视频”。但是,目前任意一个电脑用的播放器软件可以说都是“基本设置”,要想真正还原好视频应有的“精彩影像”,就必须有针对性的进行调整。
色深调整首当其冲
在设置播放器之前,我们要对GPU进行一个重要的设置,这就是调整色深。显示器的色彩能力主要由三个参数决定:色域、色准、色深。色域决定了显示器色彩的丰富度,色准决定了显示器色彩的准确度,色深则决定的是显示器色彩的过渡流畅度。色深(bit)可以理解为颜色数量的多少,数值越大,色彩越细腻,过渡越平滑自然。 红、绿、蓝即RGB三原色各具有256(2的8次方)个灰阶数时,把三个通道的256个灰阶数相乘,就能得到8bit所能呈现的全部色彩了,即1677万色;而10bit色彩就是具有2的10次方个灰阶数,每个通道为1024个灰度值,最终色彩可以达到10.7亿色,这样可以让色彩的过渡更为自然。
使用AMD显卡的用户,在AMD显卡的控制面板中,找到显示器项,然后点击“像素格式”,将其设置为Full RGB模式,也就是无论视频片源如何,在显卡输出到显示器阶段,色彩深度可以全数进行输出,达到10bit色。
使用NVIDIA显卡的用户,需要在NVIDIA显卡的控制面板左侧栏中找到“显示→更改分辨率”,将“输出动态范围”修改为“完全”;然后同样在左侧栏中找到“视频→调整视频颜色设置”,将动态范围选择为“完全(0-255)”。
使用Intel核显的用户,要在英特尔显卡控制面板(注:新版本英特尔显卡控制面板需要在微软商店中单独下载安装)中,找到“视频”一项(左侧栏中的视频图标),点击添加一个视频配置文件为“自定义”,然后下拉到底部,在“输入范围”处,将其修改为:“全”。
设置播放器 完美回放在此一举
本文以PotPlayer为例进行设置(注:该播放器免费,且具有极高的自定义功能),首先下载并安装PotPlayer(下载地址:https:∥pc.qq.com/detail/14/detail 15654.html),整个安装按照向导提示操作即可,但是在PotPlayer安装向导的最后一步,注意要勾选“安装额外的编解码器(OpenCodec)”一项,让其自动下载额外的编解码器。
安装好PotPlayer后,还需要下载“madVR”和“LAVFilters”(下载地址:https:∥pan.baidu.com/s/14MimulM4nOdfGQJKFiRsVw提取碼:hopb),它们分别是视频渲染器和分离/解码器,正是它们的“加入”,才能让PotPlayer充分调用GPU编解码能力。
安装LAVFilters非常简单,只需要解压缩后双击LAVFilters-0.71-Installer.exe运行安装向导即可。madVR的安装则需要注意,首先是解压缩的路径中不能合有中文目录(任何一级都不可以),然后我们找到madVR中的“Install.bat”右键单击,选择“以管理员身份运行”方可。
注意,madVR安装完毕后,该目录包括内部的所有文件,就不可以转移到其它存储位置了,否则将会失去效用。
一切就绪后运行PotPlayer,并在当前状态下按下键盘F5快捷键,调用PotPlayer的选项页面进行设置。首先切换左侧栏点选“滤镜”一项,然后在右侧“内置图像处理滤镜设置”处,将“激活条件”从“总是使用(推荐)”调整为“不使用”,然后点击“应用”。这样,我们就避免了PotPlayer使用默认的滤镜对视频进行处理,而是使用之后我们设置的madVR,这样当你遇到精度更高的10bit色深电影时,不会被PotPlayer直接处理成8bit色,无端的色彩就这样被“处理掉了”。
接下来,点击左侧栏“滤镜”展开,找到并单击其中的“源滤镜/分离器”一项,然后点击右下方的“滤镜/解码器管理”。
在弹出的新界面中,点击“搜索后添加”,此时左侧“DirectShow滤镜列表”中会自动添加已经安装的滤镜,我们不需要任何修改单击“确定”即可。
回到“滤镜/解码器管理”界面,将右侧“源滤镜/分离器管理”下除“Real”以外所有项统一修改称“LAVSplitter Source”,“Real”保持默认的“内置REAL源滤镜/分离器(推荐)”再点击“应用”即可。
还是在左侧滤镜下,找到“视频解码器”项单击,然后切换到右侧,将视频解码器和音频解码器修改为“LAV Video Decoder”,注意,其中的H.265修改为“使用系统默认解码器”再点击“应用”即可。
设置完滤镜和解码器,我们还需要设置视频渲染器,在PotPlayer的选项页中,左侧点击切换到“视频”选项卡,在“视频输出设备”的“视频渲染方式中”,选中“Madshi视频渲染”点击“应用”,以调用madVR。需要注意,madVR(全称madshi Video Renderer)是当前Windows平台下最好的视频渲染器,效果极为出众,但是它对资源的消耗也比较大,配置较低的电脑可能会有些卡顿。
接着,点击“视频”中的“色彩空间/属性”,将“YCbCr<->RGB规则”调整成为“自动选择”。
最后,点击左侧“声音”选项卡,在右侧的“音频输出”中,将“默认输出设备”修改为“内置WASAPI音频渲染器”,以取代默认的Default Direct SoundDevice,大功告成!
如此以来PotPlayer将利用GPU硬解能力,配合使用LAVFilters滤镜+解码,并使用madVR进行最后的渲染,视频播放时的色彩将大幅度提升(相应系统资源消耗也会更大,尤其是调用madVR时),而且借助于madVR的神奇补帧功能,普通的24帧视频内容将直接变为60帧,画面的流畅度将更加出众。