基于ubuntu系统的HEVC视频编码与解码

大家好,这是我的第一篇博客,希望大家喜欢并且能关注我一下,今后有一些心得的话也会继续在这里分享给大家!

HEVC

HEVC,也称H.265,是一种视频压缩标准,相对于H.264,HEVC被认为不仅能提升视频压缩质量,还能够达到H.264两倍之压缩量,本文将介绍如何在ubuntu系统下实现基于HEVC的视频编码与解码。当然,读者也可以在windows下实现该过程。

官方代码下载

为实现HEVC视频编码与解码,首先在官方网站上下载HM12.16(也可以根据需要下载其他版本)参考代码,我们选择在ubuntu系统下进行,在HM12.16文件中按照build->linux路径进入linux文件夹。
在终端输入

make

makefile进行编译,编译完成后在根目录下将会生成一个新的bin文件夹,并生成可执行文件TAppEncoderStatic;

编码参数

本文中关于编码参数不做详细介绍,在cfg文件中有几种参考配置文件,并且在doc文件中,software-manual对编码参数有详细介绍,建议大家阅读。合理地修改配置文件能够得到不同的编码效果,有助于大家对HEVC编码结构的理解。
需要注意的是在对于不同的YUV序列进行编码与解码时,在配置文件中的生成文件一定要修改名称,否则将会覆盖之前生成的.bin与.yuv文件

代码运行

准备好配置文件之后,即可在终端运行HM12.16代码,输入以下命令:

./TAppEncoderStatic -c xxx.cfg

其中xxx.cfg就是配置文件的名称。

运行结果

在这里我将贴出一些我的运行结果,供大家参考。
1.这是生成的每一帧的Y,U,V的PSNR值:
基于ubuntu系统的HEVC视频编码与解码
2.这是关于本次运行的SUMMARY,主要是总帧数,I,B,P帧所占的帧数以及其平均的PSNR值。
基于ubuntu系统的HEVC视频编码与解码

拓展

其实到这里关于如何在ubuntu系统下进行HEVC编码与解码的内容就已经结束了,但是我们进行HEVC编码与解码往往是需要对比原序列与编解码之后的序列,因此我将进一步介绍关于此的一些拓展:

  1. 在ubuntu系统下我们应该如何观看yuv序列以实现对原序列和编解码之后序列的对比?
    ①首先,我找到了一款ubutnu下播放yuv序列的软件,名为PYUV,我们可以利用这款软件整体地观察编解码前后两序列的区别,但也仅限于此。PYUV无法实现对两序列每一帧进行对比。
    ②基于此,我们可以使用ffmpeg进行每一帧的对比,在ubuntu系统下,我们可以利用以下命令安装ffmpeg

    sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
    sudo apt-get update
    sudo apt-get install ffmpeg
    ffmpeg -version 检测是否安装成功

    安装完成后,我们可以利用以下命令将yuv序列的每一帧提取出来:

    ffmpeg -video_size 416*240 -i xxx.yuv -f image2 frame%d.jpg

    其中416*240是视频的空间分辨率,可以根据实际情况进行修改, xxx.yuv为序列名称,生成结果是以framen(n为数字)命名的。这样我们就可以对序列的每一帧进行对比。

    2.观察运行结果,可以发现只给出了Y,U,V分量的PSNR值,那么我们如何获得总的PSNR值呢?
    依然可以采用ffmpeg,命令行输入:

    ffmpeg -i input.jpg -i reference.jpg -filter_complex “psnr” “output_psnr.jpg”

    其中,input.jpg为待求PSNR值图片的名称,reference.jpg为参考原图的名称,运行之后即可得到其PSNR值。
    由此可见,ffmpeg是一款非常方便的可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,推荐大家使用。

总结

以上就是笔者关于如何在ubuntu系统下实现HEVC视频编码与解码的过程总结,不足之处还望见谅,也希望大家能在评论区积极讨论。