浅析视频编解码技术的应用研究
2023-02-25靳晶晶刘海章黄大池
靳晶晶 刘海章 黄大池
(作者单位:四川省广播电视科学技术研究所)
视频编解码是将数字视频信号通过压缩编码技术转换为可传输或存储的格式,并在接收或播放端进行解码还原为原始视频信号的过程。视频编解码技术在很多应用中被使用,如视频通信、流媒体传输、数字电视、视频监控等。通过选择适当的编解码技术,可以实现视频高质量传输和播放。
1 视频编解码的基本原理
视频编解码主要目的是提高视频压缩效率,在视频信号转换为数字数据(编码)或将数字数据转换为视频信号(解码)的过程中通过剔除冗余信息,通过无感知损失压缩方法,将视频信号转换为更小的数据量,从而提高视频数据的传输速度和存储效率,降低传输和存储成本。
在视频编码中,首先将视频信号划分为连续的图像帧,每一帧都是由像素组成的矩阵,通过压缩编码算法将每一帧压缩为更小的数据量,以减少传输或存储所需的带宽或空间。视频编码的实现,通常包括以下几个步骤:
(1)预处理。视频信号经过采样和量化,将连续的模拟信号(模拟信号是指在单位时间和信号幅度上都是连续变化的信号)转换为离散的数字数据。
(2)变换和量化。将离散的时间和信号幅度信息转换为频域信息,通常使用离散余弦变换(DCT)进行。然后将频域信息进行量化,将较小的幅度变换系数保留,较大的幅度变换系数舍弃。
(3)运动估计和补偿。对视频中连续帧之间的运动进行估计,找出差别最小的参考帧。然后通过运动补偿的方法,仅传输运动信息和残差信息[1]。这样可以有效减少冗余信息的传输量。
(4)编码。将运动信息和残差信息等转换为二进制数据流,以便传输和存储。
视频解码与编码相反,是将编码的视频数据解压为可视化的图像序列的过程,也就是将数字信号重新转换为视频信号。解码器读取编码的二进制数据,并使用相应的解码算法将其还原为原始的图像序列,并经过解压处理得到高质量的视频内容。解码器通常需要与编码器使用相同的编码标准和参数以保证正确解码。在视频解码过程中,将逆序进行以上编码的步骤,主要包括以下几个步骤:
(1)解码。将接收到的二进制数据流转换为运动信息和残差信息。
(2)运动补偿和残差恢复。根据接收到的运动信息,对参考帧进行补偿,恢复出残差信息。
(3)反量化和反变换。将恢复的残差信息进行反量化,并通过离散余弦逆变换(IDCT)将频域信息转换为时域的数字信号。
(4)后处理。对解码后的数字信号进行滤波、增强和重建等处理,以得到最终的视频信号。
2 视频编解码的标准
视频编解码标准是为了实现视频的高效传输和存储而制定的一组规范和算法。目前常用的视频编解码标准包括MPEG、H.264/AVC、H.265/HEVC等。不同的标准在压缩效率、图像质量、实时性和智能化等方面具有不同特点,在不同的应用场景下有着不同的优势和适用性,可以根据具体应用需求选择合适的编解码标准。
2.1 MPEG
MPEG(Moving Picture Experts Group,动态图像专家组)是一套广泛应用的视频编解码标准,用于将视频信号压缩为更小的数据量,并在解码时还原出高质量的视频,目前广泛使用以下几种方式:
(1)MPEG-2。MPEG-2适用于广播、电视、数字通用光盘和蓝光光盘等高质量视频的编码和解码。MPEG-2在MPEG-1的基础上进行了改进,增加了更高的分辨率和比特率支持,并引入了多通道音频编码。
(2)MPEG-4。MPEG-4是一种多媒体压缩标准,用于压缩视频、音频和其他媒体数据。MPEG-4通过引入对象、场景和动画的概念,提供更高的编码效率和灵活性。MPEG-4还支持多种编码技术,如基于帧和基于对象的编码,以适应不同的应用需求。主要用于网络流媒体、移动通信等。
(3)MPEG-7。MPEG-7是一种描述和检索音视频内容的标准,用于处理和组织大规模的多媒体数据。MPEG-7提供了一套丰富的描述符和语义元数据,使用户可以进行高效的音视频检索和管理。
(4)MPEG-21。MPEG-21是一种多媒体框架标准,旨在提供跨平台和互操作性的多媒体应用服务。MPEG-21包括一系列的技术规范和协议,如数字版权管理、内容交换和交互、多媒体会话管理等[2]。
这些MPEG标准都使用了各种压缩算法和技术,如DCT、运动估计、量化、熵编码、预测等,以实现高效的视频编解码。其中,MPEG-2和MPEG-4是应用最广泛的编解码标准,被广泛用于广播、媒体存储和传输等领域。
2.2 H.264/AVC
H.264是一种高效的视频编解码标准,也被称为AVC(Advanced Video Coding,高级视频编码)[3]。它采用高效的压缩算法,能够将视频数据压缩到相对较小的大小,同时保持较高的视觉质量。H.264具有广泛的应用前景,它能够进行高质量的视频传输和存储,同时降低网络传输和存储成本,适用于网络视频流媒体、视频会议、数字电视、蓝光光盘、高清视频等领域。H.264通过使用高级压缩技术和更高的编码效率,可以在相同的带宽和存储空间中提供更高质量的视频。它采用了以下几种关键技术来增强压缩性能。
(1)运动估计与补偿。H.264使用运动估计来查找视频序列中的运动区域,并根据这些运动信息进行运动补偿,从而减少视频序列的冗余数据量。
(2)变换与量化。H.264将每一帧分成多个块,并对这些块进行变换以降低空间冗余。然后,对变换系数进行量化来进一步减少数据量。变换与量化过程可以通过适应性量化和场景感知量化来实现更好的编码效果。
(3)熵编码。H.264使用Huffman(哈夫曼)编码和上下文自适应二进制算术编码(CABAC)对变换系数进行熵编码。CABAC利用上下文模型进行自适应编码,提高了编码效率。
(4)预测。H.264利用帧内和帧间预测来进一步减少冗余。帧内预测使用邻近像素预测当前像素的值,而帧间预测利用已编码的参考帧来预测当前帧的像素值。
通过这些技术的组合,H.264能够提供更高的压缩比和图像质量,同时在保持相同质量的情况下减少带宽和存储需求。因此,H.264成为目前最主流和广泛采用的视频编解码标准之一,为人们提供了更好的观看体验和更高效的视频传输方案。
2.3 H.265/HEVC
H.265是新一代的视频编解码标准,也被称为高效视频编码(High Efficiency Video Coding),是H.264的后继者[4]。与H.264相比,HEVC在相同质量下压缩率更高,能够提供更高的图像质量,适用于4K、8K等超高清视频。主要特点有:
(1)H.265增加了一些新的编码技术,如更大的变换块大小、更好的运动估计算法等,使得视频编码更加高效,从而实现了更高的压缩比。
(2)H.265设计时考虑了高分辨率和高帧率的需求,可以更好地适应现代视频应用,如4K和8K超高清视频,以及高帧率视频。
(3)H.265可以支持更广泛的色彩空间,如YUV(一种颜色编码方法) 4∶2 ∶0,4∶2∶2和4∶4∶4,使得它适用于各种颜色精度的视频。
(4)H.265还提供了对HDR(高动态范围)视频的支持,可以保留更高的亮度和更大的颜色范围,以提供更丰富的图像细节和更真实的观看体验。
尽管H.265提供了更高的压缩效率和图像质量,但它的编解码复杂度也相对较高,对硬件的要求更高。然而,随着技术的进步,越来越多的设备和平台开始支持H.265,使得它在视频领域中越来越受到广泛的应用。
3 基于ITX-3588J开发板的视频编解码实验验证
ITX-3588J开发板,采用 Rockchip RK3588新一代旗舰级八核64位处理器,支持8K@60fps H.265/VP9/AVS2、8K@30fps H.264 AVC/MVC、4K@60fps AV1、1080P@60fps MPEG-2/-1/VC-1/VP8视频解码;8K@30fps H.265/H.264视频编码;支持同编同解;最高支持32路1080P@30fps解码和16路1080P@30fps编码,拥有丰富的接口。
RK3588集成的VPU(视频处理单元)具有优秀的视频编解码能力,Mpp(媒体处理软件平台)Rockchip为VPU提供的一套视频编解码的API(应用程序编程接口)。同时,Rockchip还提供了一套GStreamer的编解码插件。用户可以根据自己的需求,基于GStreamer来做视频编解码的应用,或者直接调用Mpp来实现硬件的编解码加速。本实验通过以下三种方式进行试验验证和开发应用。
3.1 基于GStreamer方式
Rockchip提供了一套GStreamer的编解码插件。GStreamer是一个开源的多媒体框架,可用于创建、处理和呈现各种类型的流媒体应用程序[5]。它提供了一套广泛的库和工具,使开发者能够在多种平台上进行音频和视频处理、编码、解码、播放和流式传输。
3.1.1 视频编码测试
使用firefly用户进入/usr/local/bin文件夹,执行h264enc.sh脚本,h264enc.sh脚本中GStreamer视频编码命令如图1所示,编码执行日志如图2所示。
图2 编码执行日志
在编码命令中,参数filesink表示将其接收到的所有媒体写入文件,使用location属性指定文件名。该命令将分辨率是4 096×2 160、NV12格式的原始测试视频使用H.264编码,生成h264.ts视频压缩文件。
3.1.2 视频解码测试
使用firefly用户进入/usr/local/bin文件夹,执行h264dec.sh脚本,h264dec.sh脚本中GStreamer视频解码命令如图3所示,解码执行日志如图4所示。
图3 GStreamer视频解码命令
图4 解码执行日志
本实验的测试文件是4K超高清视频,文件路径为/usr/local/4Ktest.mp4,文件分辨率是4 096×2 160、H.264编码、MP4文件格式。在解码命令中,参数demux后面可以指定流名称,如demux.video_0、demux.audio_0,流名称必须与文件中的流名称对应。xvimagesink表示使用XVideo extension输出。该命令解码并播放H.264视频文件,同时播放音频和视频。
3.2 基于FFMedia方式
FFMedia是一套基于Rockchip Mpp/RGA开发的视频编解码框架,支持音频aac(高级音频编码)编解码。整个框架采用Productor/Consumer模型,将各个单元都抽象为ModuleMedia类。FFMedia一共包含以下单元,输入单元VI、处理单元VP、输出单元VO、pymodule.cpp,pymodule创建vi、vo、vp等的c++代码的Python应用,以提供python调用vi、vo、vp等c++模块的python接口。视频编解码测试如下:
(1)安装所需环境,安装完成后进行编译,图5是安装编译完成后的build文件目录。
图5 编译环境目录
(2)在build文件目录下运行demo,执行解码命令,-f参数表示解码输出文件,执行结果是将h.264格式的压缩文件解码为原始NV12格式的文件。解码执行结果如图6所示。
图6 解码测试结果
(3)在build文件目录下运行demo,执行编码命令,参数-a NV12表示输入的图像类型是NV12(YUV)格式,参数-e H264表示使用的编码类型是H.264,参数-m表示输出编码文件路径。该命令将YUV原始视频文件经过H.264编码,生成压缩文件。编码执行结果如图7所示。
图7 编码测试结果
3.3 基于Mpp方式
Mpp是适用于瑞芯微芯片系列的通用媒体处理软件平台,Mpp提供支持H.265 /H.264/H.263/VP9/VP8/MPEG-4/MPEG-2/MPEG-1/VC1/MJPEG视频解码,及H.264/VP8/ MJPEG 视频编码、视频处理的功能。在ITX-3588J开发板的Ubuntu20.04系统下,Mpp相关dev包都已经安装到系统中,下载编译Mpp库,编译完成后可正常使用。视频编解码测试如下:
(1)调用mpi_dec_test,解码视频,将h.264格式的视频解压缩为yuv格式的视频。参数-i表示输入文件,-t表示视频格式为h.264,-n表示解码总帧数,-o表示输出解码文件。原视频分辨率1 920×1 080、fps30、总计600帧。解码指令如图8所示。开启新终端,输入查看日志命令tail -f /var/log/syslog,监控输出,查看日志解码结果如图9所示。
图8 调用mpi_dec_test解码指令
图9 查看日志输出解码结果
(2)调用mpi_enc_test,编码视频,将上文解码出的yuv格式的视频转为h.264格式的压缩视频,参数-t 7表示输出编码类型是h.264,原视频分辨率1 920×1 080、fps30、总帧数600。编码指令如图10所示,开启新终端,输入查看日志命令tail -f /var/log/syslog,监控输出,查看日编码结果如图11所示。
图10 调用mpi_enc_test编码指令
图11 查看日志输出编码结果
4 结语
视频编解码技术将会随着数字化进程和国产芯片的普及应用进一步发展。智能时代,未来电视的智能编解码技术将会呈现新的发展趋势,本文基于RK3588处理器开展相关研究,旨在为今后视频编解码技术与5G网络、云计算、人工智能、物联网等新技术融合应用打好基础,为电视广播、智慧安防等行业场景应用提供全新产品和解决方案。