背景提要
安全堡垒机中需要保存大量录屏视频,包括操作员的视频操作指导、报错前的故障内容等,由于视频数量多、体积大,而项目需要长时间保存这些视频,这耗尽了存储资源,影响了系统功能的执行。因此考虑对推流视频进行压缩,在保证视频质量的前提下,压缩视频所需的占用空间。此外,经过测试发现ffmpeg视频压缩需要花费大量时间,所以还需实现对视频压缩过程进行加速。
一边猜一边查的测试过程
列出插件信息:
gst-inspect-1.0 --plugin
关于gstreamer的硬件加速:它的CPU是有加速IP核的,而我们项目中厂站使用的CPU是i.MX 8MP,查看Gstreamer参考文档找到可以做硬件加速的相关插件
关于视频压缩的编解码:
查看vpu相关的插件(查找和硬件加速相关的插件):
gst-inspect-1.0 | grep vpu
可执行的加速编解码指令:
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/5ERBMYNW3D-10.200.255.153-2023-06-02-14:13:04.flv ! flvdemux ! vpudec ! vpuenc_h264 ! mp4mux ! filesink location=/home/kuangan/Videos/vod/5ERBMYNW3D-.mp4
根据GPT的建议,视频压缩指令使用Hantro VPU IP进行硬件加速测试:
gst-launch-1.0 filesrc location=/home/kuangan/Videos/vod/5ERBMYNW3D-.mp4
! decodebin ! videoconvert ! vpuenc codec=std_avc ! mp4mux ! filesink location=/home/kuangan/Videos/vod/5ERBMYNW3D-comp.mp4
视频压缩测试:
gst-launch-1.0 filesrc location=/home/kuangan/Videos/vod/5ERBMYNW3D-.mp4 ! decodebin ! videoconvert ! x264enc pass=qual quantizer=20 tune=zerolatency ! mp4mux ! filesink location=/home/kuangan/Videos/vod/5ERBMYNW3D-comp.mp4
修改指令后执行:
虽然成功操作了转码指令,但是视频大小为1,内容看不了
可能是指令插件之间的连接存在问题,没有转码成功:
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/5ERBMYNW3D-10.200.255.153-2023-06-02-14:13:04.flv ! flvdemux name=demux demux.video ! queue ! h264parse ! mp4mux ! filesink location=/home/kuangan/Videos/vod/5ERBMYNW3D-.mp4
上述指令可以正常执行:
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/8VHBGKXTLR-10.200.255.132-2023-07-04-14:15:48.flv ! flvdemux name=demux demux.video ! queue ! h264parse ! vpudec ! vpuenc_h264 ! mp4mux ! filesink
location=/home/kuangan/Videos/vod/00002.mp4
一旦添加了 ! vpudec ! vpuenc_h264 !就格式不可用
可能是参数格式写错了
换一下调用硬件加速模块书写的位置尝试
MP4文件成功出来了,而且也可以播放
但换了个位置放硬件加速编解码插件,速度反而慢了
需要多做几组尝试,也许是因为文件太小看不出来,也许是编解码插件需要替换部分插件
对比测试1
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/PPZEZYJ2XZ-10.200.255.153-2023-06-01-16:31:54.flv ! flvdemux name=demux demux.video ! vpudec ! vpuenc_h264 ! queue ! h264parse ! mp4mux ! filesink location=/home/kuangan/Videos/vod/00003.mp4
内容都是2min,可播放,但用硬件加速后MP4size似乎变小了
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/PPZEZYJ2XZ-10.200.255.153-2023-06-01-16:31:54.flv ! flvdemux name=demux demux.video ! queue ! h264parse ! mp4mux ! filesink location=/home/kuangan/Videos/vod/00003.mp4
没有使用硬件加速模块,速度很快,size不变,内容可看也是2min
对比测试2
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/NPQSBZZFMK-10.200.255.132-2023-07-04-14:11:22.flv ! flvdemux name=demux demux.video ! queue ! h264parse ! mp4mux ! filesink location=/home/kuangan/Videos/vod/00004.mp4
使用硬件加速后,时间用得更多,但是size变小了一点,内容可播放
gst-launch-1.0 -e filesrc location=/home/kuangan/Videos/vod/NPQSBZZFMK-10.200.255.132-2023-07-04-14:11:22.flv ! flvdemux name=demux demux.video ! vpudec ! vpuenc_h264 ! queue ! h264parse ! mp4mux ! filesink location=/home/kuangan/Videos/vod/00004.mp4
问GPT关于执行执行的效果↓
以上过程使用了gstreamer的硬件加速编解码插件进行视频压缩转码的测试,但还没对影响视频质量和压缩效率的参数进行调参测试,接下来测试不同参数对压缩效果的影响,筛选出最合适的方案。