利用GPU加速以及拼接技术的实时视频压缩保存方法技术

技术编号:39271823 阅读:10 留言:0更新日期:2023-11-07 10:51
本发明专利技术提供一种利用图形处理器GPU(Graphics Processing Unit)加速以及拼接技术的实时视频压缩保存方法,使用FFmpeg以及CUDA实现多路低分辨率视频拼接合成一路高分辨率视频,并完成H.264或者H.265的压缩编码。本发明专利技术全流程均执行于GPU,不仅充分利用了其多线程的加速特性,而且减少了GPU与主机之间数据传输的耗时。同时,本发明专利技术降低了中央处理单元CPU(Central Processing Unit)的工作负载,提高了系统的多任务并发性能。提高了系统的多任务并发性能。提高了系统的多任务并发性能。

【技术实现步骤摘要】
利用GPU加速以及拼接技术的实时视频压缩保存方法


[0001]本专利技术涉及GPU加速和视频拼接
,具体涉及一种利用GPU加速以及拼接技术的实时视频压缩保存方法。

技术介绍

[0002]在许多实际的视频数据采集软件使用时,必须运行在边缘计算设备,其硬件配置的算力有限,但需要实时的进行多路高清视频的压缩编码。例如,实时采集车辆周围环境的视觉数据,使用工控机连接前视、后视以及环视摄像头,由于工控机是车载设备,其功率受限,但为了保证数据之间的时间同步,软件必须同时进行多路视频的数据保存。这使得视频压缩编码成为很具有挑战性的任务,需要采用合适的前处理技术将视频缩放、拼接之后再进行压缩编码。
[0003]目前实时视频压缩保存方法多种多样,例如使用CPU和OpenCV多进程处理多路视频,但是OpenCV不支持GPU加速以及H.265编码,由于CPU不支持硬件的编解码,所以处理速度慢,内存占用高;使用GPU加速以及FFmpeg处理多路视频但不使用拼接技术进行压缩编码时,虽然降低了CPU和内存的负载,但是由于每一路视频的压缩编码都需要消耗固定的资源,其中包括用于存储编码参数的内存空间、调用压缩编码库或接口的时间,当视频数量变大时,显存的消耗增长速度更快。并且在压缩编码完成之后,从GPU通过PCIe总线传输回主机时,多个小文件比单个大文件耗费更多的资源和时间。

技术实现思路

[0004]本专利技术的目的在于提供一种使用GPU加速以及拼接技术的视频压缩编码方法。
[0005]实现本专利技术目的的技术解决方案为:一种利用GPU加速以及拼接技术的实时视频压缩保存方法,包括以下步骤:
[0006]步骤一,配置FFmpeg编译环境,配置CUDA编译环境,配置FFmpeg+CUDA联合编译环境,配置H.264以及H.265的GPU编解码的编译环境;
[0007]步骤二,由主机接收所有待压缩的视频文件,确定视频文件的相关参数,包括视频个数、视频分辨率、输出视频的编码方式和质量参数,并连同视频文件一起上载到GPU;
[0008]步骤三,使用GPU对上载的视频文件进行预处理,将输入视频的分辨率调整为低、中、高三种分辨率,其中中分辨率的宽与高是低分辨率的宽与高的两倍,高分辨率的宽与高应当是中分辨率的宽与高的两倍;
[0009]步骤四,使用GPU拼接预处理之后的视频文件,每四路低分辨率的视频拼接成一路中分辨率的视频,每四路中分辨率的视频拼接成一路高分辨率的视频,每四路高分辨率的视频拼接成一路极高分辨率的视频,不足四路视频时不进行拼接,拼接后输出的高、中、低分辨率与预处理后的视频的高、中、低分辨率保持一致,极高分辨率的宽与高是高分辨率的宽与高的两倍;
[0010]步骤五,使用GPU对拼接之后的视频文件进行压缩编码;
[0011]步骤六,将压缩编码后的视频文件下载到主机并保存。
[0012]进一步的,步骤二,由主机接收所有待压缩的视频文件,确定视频文件的相关参数,包括视频个数、视频分辨率、输出视频的编码方式和质量参数,并连同视频文件一起上载到GPU,具体方法为:
[0013]输入视频为摄像头实时采集的视频,通过命令“ls/dev/video*|wc

w”获得Linux系统下待处理视频数量;循环使用FFmpeg库中的函数get_video_resolution获得所有视频的分辨率;初始化两个变量,用于保存输出视频的参数,包括编码方式以及质量参数。
[0014]进一步的,步骤三,使用GPU对上载的视频文件进行预处理,将输入视频的分辨率调整为低、中、高三种分辨率,其中视频调整后的分辨率为:
[0015][0016]式中Output
resolution
为预处理后视频的分辨率,width
×
height为预处理前视频的像素数量,同时代表了视频的分辨率,L,H,M分别代表低、中、高分辨率的阈值,Low,Medium,High分别代表预设的低、中、高三种分辨率。
[0017]进一步的,步骤三中,由于使用的FFmpeg库中有两个版本的处理命令,分别是CPU版本和GPU版本,为了避免数据在预处理之后被传回主机中,故需在命令中加入
“‑
hwaccel

cuvid”来确定使用GPU版本,并且在预处理中设置输出分辨率时需要使用“scale_npp”命令来确定使用GPU版本。
[0018]进一步的,步骤四,使用GPU拼接预处理之后的视频文件,每四路低分辨率的视频拼接成一路中分辨率的视频,每四路中分辨率的视频拼接成一路高分辨率的视频,每四路高分辨率的视频拼接成一路极高分辨率的视频,不足四路视频时不进行拼接,其中拼接之后各种分辨率的视频的数量为:
[0019]Num
UltraHigh
=((x/4+y)/4+z)/4
[0020]Num
High
=((x/4+y)/4+z)%4
[0021]Num
Medium
=(x/4+y)%4
[0022]Num
Low
=x%4
[0023]其中,x,y,z分别代表预处理后的低、中、高分辨率的视频数量,Num
UltraHigh
,Num
High
,Num
Medium
,Num
Low
分别代表拼接之后极高、高、中、低分辨的视频数量;若拼接之后各个分辨率的视频数小于或等于预处理后对应分辨率的视频数,那么直接输出该分辨率下预处理后的视频,不需要拼接直接进行压缩操作;
[0024]完成中分辨率拼接操作时,使用线程池技术,针对每个待拼接生成的视频分配一个线程,之后使用命令“nullsrc=size=目标分辨率”新建空矩阵,其中目标分辨率与中分辨率视频的分辨率相同,新建空矩阵的数量为中分辨率输出视频数减去预处理后的中分辨率的视频数;
[0025]使用命令“setpts=PTS

STARTPTS”重新设置视频帧的时间戳,将预处理后待拼接的视频转换为相对于第一个视频帧的起始时间戳的相对时间戳,以便进行拼接操作;
[0026]因为多个相机采集画面是同步的,所以所有视频的持续时间是相同的,对于所有待拼接的视频使用“overlay=shortest=1”进行视频流同步处理;
[0027]使用“:x=水平偏移像素:y=垂直偏移像素”命令放置待拼接的视频,其中水平偏移像素和垂直偏移像素代表了等待拼接的视频的左上角在空白矩阵中的位置,每四个低分辨率的预处理后的视频按照四宫格的形式拼接成一个中分辨率的视频;
[0028]完成高分辨率拼接操作时,新建目标分辨率与高分辨率视频的分辨率相同的空矩阵,将预处理后的中分辨率视频和中分辨率拼接后的中分辨率视频4个划分为一组,按照四宫格的形式拼接成一个高分辨率的视频;
[0029]完成极高分辨率拼接操作时,新建目标分本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种利用GPU加速以及拼接技术的实时视频压缩保存方法,其特征在于,包括以下步骤:步骤一,配置FFmpeg编译环境,配置CUDA编译环境,配置FFmpeg+CUDA联合编译环境,配置H.264以及H.265的GPU编解码的编译环境;步骤二,由主机接收所有待压缩的视频文件,确定视频文件的相关参数,包括视频个数、视频分辨率、输出视频的编码方式和质量参数,并连同视频文件一起上载到GPU;步骤三,使用GPU对上载的视频文件进行预处理,将输入视频的分辨率调整为低、中、高三种分辨率,其中中分辨率的宽与高是低分辨率的宽与高的两倍,高分辨率的宽与高应当是中分辨率的宽与高的两倍;步骤四,使用GPU拼接预处理之后的视频文件,每四路低分辨率的视频拼接成一路中分辨率的视频,每四路中分辨率的视频拼接成一路高分辨率的视频,每四路高分辨率的视频拼接成一路极高分辨率的视频,不足四路视频时不进行拼接,拼接后输出的高、中、低分辨率与预处理后的视频的高、中、低分辨率保持一致,极高分辨率的宽与高是高分辨率的宽与高的两倍;步骤五,使用GPU对拼接之后的视频文件进行压缩编码;步骤六,将压缩编码后的视频文件下载到主机并保存。2.根据权利要求1所述的利用GPU加速以及拼接技术的实时视频压缩保存方法,其特征在于,步骤二,由主机接收所有待压缩的视频文件,确定视频文件的相关参数,包括视频个数、视频分辨率、输出视频的编码方式和质量参数,并连同视频文件一起上载到GPU,具体方法为:输入视频为摄像头实时采集的视频,通过命令“ls/dev/video*|wc

w”获得Linux系统下待处理视频数量;循环使用FFmpeg库中的函数get_video_resolution获得所有视频的分辨率;初始化两个变量,用于保存输出视频的参数,包括编码方式以及质量参数。3.根据权利要求1所述的利用GPU加速以及拼接技术的实时视频压缩保存方法,其特征在于,步骤三,使用GPU对上载的视频文件进行预处理,将输入视频的分辨率调整为低、中、高三种分辨率,其中视频调整后的分辨率为:式中Output
resolution
为预处理后视频的分辨率,width
×
height为预处理前视频的像素数量,同时代表了视频的分辨率,L,H,M分别代表低、中、高分辨率的阈值,Low,Medium,High分别代表预设的低、中、高三种分辨率。4.根据权利要求3所述的利用GPU加速以及拼接技术的实时视频压缩保存方法,其特征在于,步骤三中,由于使用的FFmpeg库中有两个版本的处理命令,分别是CPU版本和GPU版本,为了避免数据在预处理之后被传回主机中,故需在命令中加入
“‑
hwaccel

cuvid”来确定使用GPU版本,并且在预处理中设置输出分辨率时需要使用“scale_npp”命令来确定使用GPU版本。5.根据权利要求1所述的利用GPU加速以及拼接技术的实时视频压缩保存方法,其特征
在于,步骤四,使用GPU拼接预处理之后的视频文件,每四路低分辨率的视频拼接成一路中分辨率的视...

【专利技术属性】
技术研发人员:张如楠张伟斌余锡新王玮朱世豪曾振平
申请(专利权)人:无锡联坤科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1