CN112911306A - 一种视频处理方法、装置、电子设备及存储介质 - Google Patents

一种视频处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN112911306A
CN112911306A CN202110055638.5A CN202110055638A CN112911306A CN 112911306 A CN112911306 A CN 112911306A CN 202110055638 A CN202110055638 A CN 202110055638A CN 112911306 A CN112911306 A CN 112911306A
Authority
CN
China
Prior art keywords
video
frame
thread
target
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110055638.5A
Other languages
English (en)
Other versions
CN112911306B (zh
Inventor
屈伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN202110055638.5A priority Critical patent/CN112911306B/zh
Publication of CN112911306A publication Critical patent/CN112911306A/zh
Application granted granted Critical
Publication of CN112911306B publication Critical patent/CN112911306B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Abstract

本发明提供一种视频处理方法、装置、电子设备及存储介质,所述方法包括:创建与目标视频对应的视频抽帧子线程,由主线程将目标视频的视频信息发送中视频抽帧子线程,由视频抽帧子线程基于视频信息对目标视频进行抽帧,并将抽帧得到视频帧图像返回至主线程,由主线程对视频帧图像进行算法处理。本发明实施例采用流水线模式,通过将视频抽帧和算法处理放在不同的线程中执行,实现了视频抽帧和算法的同时无阻塞进行,可以有效地减少整体视频处理时间。

Description

一种视频处理方法、装置、电子设备及存储介质
技术领域
本申请涉及视频处理领域,尤其涉及一种视频处理方法、装置、电子设备及存储介质。
背景技术
深度学习算法经过长期的演进,目前无论是在精度还是在速度上都有较大的提升,也应用在各行各业中,其中在视频行业中也大显身手,例如:蒙版弹幕,AI(ArtificialIntelligence,人工智能)广告,修复老片,视频低俗血腥暴力实时性审核等。
目前利用深度学习算法对视频进行处理,通常采用的方法是:先将视频进行抽帧处理,将视频帧全部转换为jpg等格式,并将格式转换后的图像保存到硬盘,然后再由算法SDK(Software Development Kit,软件开发工具包)从硬盘中读取图像并加载到内存上后进行处理。采用此种视频处理方法对视频进行处理耗费的总时间为视频抽帧的时间、图像存储到硬盘的时间、从硬盘中读取图像的时间以及对图像预处理的时间以及算法SDK处理的时间的总和,耗费的时间过多。
发明内容
为了解决现有的视频处理耗费时间过多的技术问题,本申请提供了一种视频处理方法、装置、电子设备及存储介质。
第一方面,本申请提供了一种视频处理方法,包括:
创建与目标视频对应的视频抽帧子线程;
由主线程将所述目标视频的视频信息发送至所述视频抽帧子线程;
由所述视频抽帧子线程基于所述视频信息对所述目标视频进行抽帧,并将抽帧得到的视频帧图像返回至所述主线程;
由所述主线程对所述视频帧图像进行算法处理。
作为一种可能的实现方式,创建与目标视频对应的视频抽帧子线程,包括:
获取目标视频的视频信息,所述视频信息中至少包含所述目标视频的视频编码格式;
基于所述视频编码格式确定与所述目标视频对应的目标解码组件;
创建与所述目标抽帧组件对应的视频抽帧子线程,以作为与所述目标视频对应的视频抽帧子线程。
作为一种可能的实现方式,基于所述视频编码格式确定与所述目标视频对应的目标抽帧组件,包括:
预先设置第一抽帧组件和第二抽帧组件,并预先设置第一抽帧组件支持的视频编码格式;
将所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式进行匹配;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式相匹配,则确定所述第一抽帧组件为与所述目标视频对应的目标抽帧组件;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式不匹配,则确定所述第二抽帧组件为与所述目标视频对应的目标抽帧组件。
作为一种可能的实现方式,所述第一抽帧组件为GPU抽帧组件,所述第二抽帧组件为CPU抽帧组件。
作为一种可能的实现方式,若所述第一抽帧组件为与所述目标视频对应的目标抽帧组件,则由所述视频抽帧子线程基于所述目标视频的视频信息对所述目标视频进行抽帧,包括:
由所述视频抽帧子线程将所述目标视频的视频信息发送至所述第一抽帧组件,以使所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧;
所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧,包括:
基于所述视频信息,利用GPU抽帧策略对所述目标视频进行抽帧,得到初始视频帧图像;
对所述初始视频帧图像进行格式转换,得到格式符合预设的算法工具包要求的视频帧图像。
作为一种可能的实现方式,所述方法还包括:
由所述主线程获取所述视频抽帧子线程的运行标志位,所述运行标志位用于标识所述抽帧子线程的运行状态,所述运行状态为视频抽帧中、抽帧异常或抽帧完成;
若所述运行标志位标识所述抽帧子线程的运行状态为视频抽帧中,则控制所述视频抽帧子线程继续运行;
若所述运行标志位标识所述视频抽帧子线程的运行状态为抽帧异常或抽帧完成,则控制所述视频抽帧子线程停止运行。
作为一种可能的实现方式,所述方法还包括:
当所述算法处理存在异常时,生成异常控制信息;
将所述异常控制信息发送至所述视频抽帧子线程,所述异常控制信息用于控制所述视频抽帧子线程终止对所述目标视频的抽帧。
作为一种可能的实现方式,所述视频抽帧子线程将抽帧得到的视频帧图像返回至所述主线程,包括:
所述视频抽帧子线程将抽帧得到的视频帧图像存入缓存队列,以使所述主线程从所述缓存队列中抽取所述视频帧图像。
第二方面,本申请实施例还提供了一种视频处理装置,包括:
子线程创建模块,用于创建与目标视频对应的视频抽帧子线程;
主线程模块,用于将所述目标视频的视频信息发送至所述视频抽帧子线程;
视频抽帧子线程模块,用于基于所述视频信息对所述目标视频进行抽帧;
所述视频抽帧子线程模块,还用于将抽帧得到的视频帧图像返回至所述主线程;
所述主线程模块,还用于对所述视频帧图像进行算法处理。
第三方面,本发明实施例还提供了一种电子设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的数据处理程序,以实现第一方面所述的视频处理方法。
第四方面,本发明实施例还提供了一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面所述的视频处理方法。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
本申请实施例提供的视频处理方法,创建与目标视频对应的视频抽帧子线程,由主线程将目标视频的视频信息发送中视频抽帧子线程,由视频抽帧子线程基于视频信息对目标视频进行抽帧,并将抽帧得到视频帧图像返回至主线程,由主线程通过对视频帧图像进行算法处理。本发明实施例采用流水线模式,通过将视频抽帧和算法处理放在不同的线程中执行,实现了视频抽帧和算法的同时无阻塞进行,可以有效地减少整体视频处理时间。
进一步的,本发明实施例由主线程直接对视频帧图像进行算法处理,无需将视频帧图像转换成jpg等格式,也无需存储至硬盘,避免了格式转换导致的图像信息损失,有效的抑制算法处理精度的减小,而且因为无需存储至硬盘,也就节省从硬盘中读取图像耗费的时间,并且由于无需使用硬盘,也减少了硬件设备的使用数量,节约了硬件开销成本。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种系统框架图;
图2为本申请实施例提供的一种视频处理方法流程图;
图3为本申请实施例提供的另一种视频处理方法流程图;
图4为本申请实施例提供的一种GPU抽帧组件的视频抽帧流程图;
图5为本申请实施例提供的一种GPU抽帧的示意图;
图6为本申请实施例提供的一种视频处理装置的框图;
图7为本申请实施例提供的一种电子设备示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前利用深度学习算法对视频进行处理时采用的方法通常为:对视频进行抽帧处理,将抽取的视频帧图像转换为jpg等格式的图像后存储到硬盘中,然后在进行计算时,深度学习算法SDK从硬盘中读取存储的图像,并将图像加载到内存上后进行算法处理,整个过程耗时过长,并且在将视频帧转换成jpg等格式时,可能会丢失部分信息,进而导致最终根据算法得到的结果不准确。
为了解决上述视频处理耗时长、图像信息易丢失等技术问题,本申请实施例提供了一种视频处理方法。
为了便于对本发明实施例提供的视频处理方法进行理解,本实施例先对用于实现本发明视频处理方法的系统框架进行说明。
图1为本发明实施例提供的一种系统框架示意图,如图1所示,该系统中可以包括:
视频信息解析模块101、控制模块102、信息传递模块103和抽帧模块104。
其中,视频信息解析模块101,主要用于对待处理的视频进行解析,得到视频的视频信息。
作为一个实施例,视频信息解析模块可以使用ffprobe来获取视频的视频信息,其中视频信息包括视频帧的宽和高、帧率、视频编码格式、视频时长和/或视频总帧数等。其中,ffprobe是一个多媒体流分析工具,主要用来查看多媒体文件的信息。
抽帧模块104,主要由多个抽帧组件组成,抽帧组件用于对视频进行抽帧处理,从而得到对应的视频帧图像。不同的抽帧组件采用不同的视频抽帧策略,并且预先设置了各抽帧组件支持的视频编码格式。
作为一个实施例,如图1所示,抽帧模块中可以包括GPU抽帧组件和优化后的CPU抽帧组件,GPU抽帧组件对应的视频抽帧策略为GPU抽帧策略,CPU抽帧组件对应的视频抽帧策略为CPU抽帧策略,其中GPU抽帧组件支持对MPEG-2、VC-1、H.264等格式的视频进行抽帧,不支持对H.263格式的视频进行抽帧,而CPU抽帧组件,则支持对H.263等格式的视频进行抽帧。需要说明的是,GPU抽帧组件和CPU抽帧组件只是示例性的,抽帧模块中除了GPU抽帧组件和CPU抽帧组件之外还可以设置其他抽帧组件,本发明不做具体限定。
控制模块102,主要用于对抽帧模块104中的抽帧组件进行初始化、创建与待处理的视频对应的视频抽帧子线程、对抽帧模块得到的视频帧图像进行缓存、对视频帧图像进行算法处理以及进行异常监测。
作为一个实施例,控制模块102可以设置有用于对抽帧模块104中的抽帧组件进行初始化的初始化组件,主要用于对抽帧模块104中的GPU抽帧组件进行初始化,因为GPU抽帧组件是通过‘硬解码’方式来进行抽帧的,而‘硬解码’需要使用GPU硬件资源计算,因此在使用GPU抽帧组件之前,可以预先对GPU抽帧组件进行初始化。具体的,控制模块102中初始化组件可以为cuda(显卡厂商NVIDIA推出的运算平台)初始化组件,在对GPU抽帧组件进行初始化时,首先选取GPU抽帧组件的硬件型号,然后利用初始化组件初始化cuda上下文(为满足不与其他深度学习框架cuda上下文初始化冲突,本发明中以类变量初始化),将初始化完成的cuda上下文从控制模块102的主线程(主线程为控制模块102启动时产生的线程)中弹出,由与GPU抽帧组件对应的视频抽帧子线程压入,以便后续重复利用,避免每次创建cuda上下文。
作为一个实施例,控制模块102可以设置有用于创建与待处理的视频对应的视频抽帧子线程的子线程创建模块,子线程创建模块主要用于确定与待处理的视频对应的抽帧组件,并创建与确定的抽帧组件对应的视频抽帧子线程。具体的,控制模块102根据视频信息解析模块101得到的待处理的视频的视频编码格式,确定支持该视频编码格式的抽帧组件为与待处理的视频对应的抽帧组件。因为在对视频进行抽帧时,需要对视频进行解码,所以控制模块102可以调用decode_thread函数创建与抽帧组件对应的视频抽帧子线程,其中decode_thread函数为一种用于创建视频解码线程的函数。
作为一个实施例,控制模块102中可以设置用于对视频抽帧子线程得到的视频帧图像进行算法处理的算法组件,具体的,算法组件中预先设置算法SDK,通过算法SDK对内存中缓存的视频帧图像进行算法处理,其中算法SDK根据实际需求设置,例如可以为深度学习算法SDK。
作为一个实施例,控制模块102中还可以设置有异常处理组件,具体的,异常处理组件主要用于监测视频抽帧子线程的运行标志位,其中运行标志位用于标识视频抽帧子线程的运行状态,运行状态为视频抽帧中、抽帧异常或抽帧完成,根据运行标志位确定视频抽帧子线程的运行状态,并根据运行状态,立即做出不同的相应,保证服务稳定运行。
算法处理阶段也有可能出错,因此异常处理组件还用于监测算法处理是否异常,当监测到算法处理异常时主线程产生一个异常控制信号,将异常通知信号通过队列传输到视频抽帧子线程中,视频抽帧子线程监听到该信号时,主动释放抽帧处理。
信息传递模块103,主要用于实现控制模块102与抽帧模块104之间的数据交互。
作为一个实施例,信息传递模块103中包含多个信息传递组件,不同的信息传递组件用于实现不同的抽帧组件与控制模块102之间的信息交互,例如图1所示,信息传递模块103中包含第一信息传递组件和第二信息传递组件,第一信息传递组件用于实现主线程与GPU抽帧组件对应的视频抽帧子线程之间的信息交互,第二信息传递组件用于实现主线程与CPU抽帧组件对应的视频抽帧子线程之间的信息交互,不同的信息传递组件采用的信息传递方式也可能不同,例如由于GPU抽帧组件通常采用c++语言编写,而控制模块102通常采用python语言编写,因此第一信息传递组件可以通过pybind11实现控制模块102与GPU抽帧组件之间的信息交互。而第二信息传递组件则可以采用queue(即队列)的方式实现控制模块102与CPU抽帧组件之间的信息交互。
作为一个实施例,图1所示的系统的各个模块可以集中在一台设备上,也可以分布在不同的设备上,本实施例不做具体限定,其中,设备包括但不限于计算机、服务器等。
下面结合附图,对本发明本实施例提供的视频处理方法进行说明。
图2为本发明实施例提供的一种视频处理方法的实现流程图,该方法可以应用于图1所示的系统。如图2所示,该方法可以包括如下步骤:
S21.创建与目标视频对应的视频抽帧子线程。
其中,目标视频为当前待进行视频处理的视频。
作为一个实施例,可以通过decode_thread函数创建视频抽帧子线程。
S22.由主线程将所述目标视频的视频信息发送至所述视频抽帧子线程。
其中,视频的视频信息是体现视频特点的信息,包括但不限于视频编码格式、视频帧的宽和高、帧率、视频时长和/或视频总帧数等。
S23.由所述视频抽帧子线程基于所述视频信息对所述目标视频进行抽帧。
S24.由所述视频抽帧子线程将抽帧得到视频帧图像返回至所述主线程。
作为一个实施例,视频抽帧子线程通过调用预设的抽帧组件基于目标视频的视频信息对目标视频进行抽帧,进而得到目标视频对应的视频帧图像,其中抽帧组件可以为GPU抽帧组件或CPU抽帧组件等。
S25.由所述主线程对所述视频帧图像进行算法处理。
作为一个可选的实现方式,由所述主线程对所述视频帧图像进行算法处理可以包括:由主线程直接调用预设的算法工具包对视频帧图像进行算法处理。
作为另一个可选的实现方式,由所述主线程对所述视频帧图像进行算法处理可以包括:预先创建与目标视频对应的算法子线程,由主线程调用该算法子线程,以使该算法子线程利用预设的算法工具包对视频帧图像进行算法处理。
上述两种实现方式中的算法工具包即为算法SDK,可以由用户或开发人员根据需求设置,例如可以为设置为深度学习算法SDK等,本实施例对此不作具体限定。
根据本步骤S25的描述可以确定,本发明实施例通过主线程直接对视频抽帧子线程得到的视频帧图像进行算法处理,不需要将视频帧图像存储为jpg等格式的图像,最大程度的保留视频帧的原始信息,能够有效的抑制算法处理精度的减小。
本实施例提供的一种视频处理方法,创建与目标视频对应的视频抽帧子线程,由主线程将目标视频的视频信息发送至视频抽帧子线程,由视频抽帧子线程基于视频信息对目标视频进行抽帧,并将得到的视频帧图像返回至主线程,由主线程对视频帧图像进行算法处理。本发明实施例采用流水线模式,将视频抽帧和算法处理放在不同的线程中执行,实现了视频抽帧和算法的同时无阻塞进行,可以有效地减少整体视频处理时间。
进一步的,本发明实施例由主线程直接对原始无损的视频帧图像进行算法处理,无需将视频帧图像转换成jpg等格式,避免了格式转换导致的图像信息损失,不会压缩图像信息,避免了压缩图像导致的算法精度下降,有效的抑制算法处理精度的减小。而且本方案也无需将视频帧图像存储至硬盘,节省了从硬盘中读取图像耗费的时间,并且由于无需使用硬盘,也减少了硬件设备的使用数量,节约了硬件开销成本。
图3为本发明实施例提供的另一种视频处理方法的实现流程图,如图3所示,该方法可以包括如下步骤:
S31.获取目标视频的视频信息,所述视频信息中至少包含所述目标视频的视频编码格式。
作为一个实施例,目标视频的视频信息可以是采用ffprobe对目标视频进行解析得到的。ffprobe是一个多媒体流分析工具,主要用来查看多媒体文件的信息。
作为一个实施例,视频信息中除视频编码格式外,还可以包括视频帧的宽和高、帧率、视频时长和/或视频总帧数等。
S32.基于所述视频编码格式确定与所述目标视频对应的目标抽帧组件。
其中,抽帧组件为用于对视频进行抽帧的组件。
作为一个实施例,预先设置多个(不少于两个)抽帧组件,不同的抽帧组件采用的抽帧方式不同,而不同的抽帧方式支持的视频编码格式可能也不同,因此预先设置各抽帧组件支持的视频编码格式,根据目标视频的视频编码格式从多个抽帧组件中确定出支持目标视频对应的视频编码格式的目标抽帧组件。
在应用中,可以预先设置第一抽帧组件和第二抽帧组件,并预先设置第一抽帧组件支持的视频编码格式,可以通过下述方式确定与目标视频对应的目标抽帧组件:
将目标视频的视频编码格式与第一抽帧组件支持的视频编码格式进行匹配,若目标视频的视频编码格式与第一抽帧组件支持的视频编码格式相匹配,则确定第一抽帧组件为与目标视频对应的目标抽帧组件,若目标视频的视频编码格式与第一抽帧组件支持的视频编码格式不匹配,则确定第二抽帧组件为与目标视频对应的目标抽帧组件。
因为一个抽帧组件可能会支持对多种视频编码格式的视频进行抽帧,因此在将目标视频的视频编码格式与第一抽帧组件支持的视频编码格式进行匹配,若目标视频的视频编码格式与第一抽帧组件支持的任意一种视频编码格式一致,则确定目标视频的视频编码格式与第一抽帧组件支持的视频编码格式相匹配。
作为一个例子,第一抽帧组件可以为利用GPU抽帧策略进行视频抽帧的GPU抽帧组件,第二抽帧组件可以为利用CPU抽帧策略进行视频抽帧的CPU抽帧组件。
S33.创建与所述目标抽帧组件对应的视频抽帧子线程。
作为一个实施例,可以通过decode_thread函数创建视频抽帧子线程。需要注意的是,每次在创建视频抽帧子线程时,需要确保用于与抽帧组件之间进行数据传输的消息队列为空。
S34.由主线程将所述目标视频的视频信息发送至所述视频抽帧子线程。基于图1所示的系统,可以采用信息传递模块103中与目标抽帧组件对应的信息传递组件将主线程中的目标视频的视频信息发送至视频抽帧子线程。基于此,若目标视频抽帧组件为GPU抽帧组件,则通过与GPU抽帧组件对应的第一信息传递组件,将主线程中的视频信息发送至视频抽帧子线程。若目标视频抽帧组件为CPU抽帧组件,则通过与CPU抽帧组件对应的第二信息传递组件,将主线程中的视频信息发送至视频抽帧子线程。因为不同的抽帧组件采用的编写语言不同等原因,不同的信息传递组件采用的信息传递方式可能也不同。
作为一个实施例,由于GPU抽帧组件通常采用c++语言编写,而主线程所在的控制模块102通常采用python语言编写,因此第一信息传递组件可以通过pybind11将主线程中的视频信息发送至视频抽帧子线程。pybind11可实现C++和Python之间的无缝操作。pybind11是一个轻量级的只包含一组头文件的C++库,可以在Python中使用C++类型,这样对于主线程就可以像调用Python模块一样来使用c++编写的GPU抽帧组件。
作为一个实施例,第二信息传递组件可以通过队列的方式将主线程中的视频信息发送至视频抽帧子线程。
S35.由所述视频抽帧子线程根据所述视频信息对所述目标视频进行抽帧,得到视频帧图像。
作为一个实施例,主线程可以向视频抽帧子线程发送控制指令,该控制指令用于调用视频抽帧子线程根据接收到的视频信息对目标视频进行抽帧。
作为一个实施例,由视频抽帧子线程在对目标视频进行抽帧时,可以通过调用目标抽帧组件来对目标视频进行抽帧,具体的,若目标抽帧组件为CPU抽帧组件,则由视频抽帧子线程将视频信息发送至CPU抽帧组件,通过CPU抽帧组件对目标视频进行抽帧,若目标抽帧组件为GPU抽帧组件,则由视频抽帧子线程将视频信息发送至GPU抽帧组件,通过GPU抽帧组件对目标视频进行抽帧。
作为一个实施例,CPU抽帧组件可以采用现有成熟“软解码”技术对目标视频进行抽帧,本实施例不再详细描述。
作为一个实施例,如图4所示,GPU抽帧组件可以采用如下步骤对目标视频进行抽帧:
S41.基于目标视频的视频信息,利用GPU抽帧策略对所述目标视频进行抽帧,得到初始视频帧图像。
作为一个实施例,在利用GPU抽帧策略对所述目标视频进行抽帧之前还可以包括:对视频信息进行校验,主要包括:确定视频地址是否正确,确定fps(Frames Per Second,画面每秒传输帧数)是否不在常规范围内(例如0-120),确地特定时间段的开始结尾时间是否符合逻辑,确定解码的帧数与实际需求帧数是否相差较大等。
作为一个实施例,通过GPU抽帧策略对所述目标视频进行抽帧,可以先使用FFmpegDemuxer(基于FFmpeg的视音频分离器)解析目标视频的视频流信息,配置视频帧图像的格式、图像裁剪、图像缩放、视频抽帧时间范围、视频抽帧间隔(每秒抽帧数量)等参数,然后基于配置的参数对目标视频进行抽帧,得到目标视频的初始视频帧图像,具体的,如图5所示,对目标视频进行抽帧得到初始视频帧图像可以包括如下步骤:
步骤1:对目标视频的比特流进行熵解码,通过树编码(即图5所示的tree coding)填充向量Vectors和利用布尔编码(即图5所示的boolean coding)填充标签headers。
步骤2:利用游程解码等方式进行参考帧解码顺序重排(图5中未示出)。
步骤3:反量化(即图5所示的inverse quantization),可以通过乘以指定的比例实现反量化。
步骤4:反离散余弦变换(即图5所示的inverse transform),得到参考帧。
步骤5:进行运动补偿(即图5所示的motion compensation),即对上一帧的参考帧做运动补偿处理。
步骤6:结合第5步的运动补偿结果和第4步的反离散余弦变换结果,重构参考帧,依次得到目标视频的视频帧(即图5所示的frames store)。
步骤7:对得到的视频帧进行颜色空间转换(即图5所示的color spaceconversion),由YUV格式转RGB,将颜色空间转换后得到的视频帧作为初始视频帧图像。
除了上述步骤,如图5所示,还有环路滤波(即图5所示的loop filter)和帧内预测(即图5所示的intra prediction)。
上述抽帧过程即为现有的GPU硬编码的逆过程,具体实现方式本实施例不再详细描述。
本实施例中,GPU抽帧组件增加了抽帧时选择图像格式、图像裁剪、图像缩放、只对部分时间视频抽帧等功能,使得GPU抽帧组件更加通用化,且进一步提升了视频处理效率。
S42.对所述初始视频帧图像进行格式转换,得到格式符合预设算法工具包的要求的视频帧图像。
在本实施例中,由于由主线程利用预设的算法SDK对视频帧图像进行算法处理,而算法SDK往往是python代码实现,由于GPU抽帧组件通常通过c++代码实现,所以,对初始视频帧图像进行格式转换,保证了算法SDK可以顺利对视频帧图像进行算法处理。
S36.由所述视频抽帧子线程将所述视频帧图像返回至所述主线程。
作为一个实施例,视频抽帧子线程可以使用队列传输的方式将抽帧得到的视频帧图像传输给主线程,具体的,由所述视频抽帧子线程将抽帧得到的视频帧图像存入缓存队列,以使所述主线程从所述缓存队列中抽取所述视频帧图像。当缓存队列里排队的视频帧图像的数量达到一定数量时,视频抽帧子线程自动停止视频抽帧,防止视频帧图像过多造成阻塞。
采用队列传输的方式对视频帧图像进行传输,使得主线程可以有序的获取视频帧图像,保证了后续算法处理的有序进行,避免了视频帧过多造成的阻塞。
基于图1所示的系统,可以采用信息传递模块103中与目标抽帧组件对应的信息传递组件将抽帧得到的视频帧图像发送至主线程。
S37.由所述主线程利用预设的算法工具包对所述视频帧图像进行算法处理。
作为一个可选的实现方式,可以由主线程直接调用预设的算法SDK来对视频帧图像进行算法处理。
作为另一个可选的实现方式,可以预先创建与目标视频对应的算法子线程,由主线程调用该算法子线程利用预设的算法SDK对视频帧图像进行算法处理。
其中,算法SDK可以由用户或开发人员根据实际需求设置,例如可以为深度学习算法SDK等。
本发明实施例提供一种视频处理方法,通过获取目标视频的视频信息,基于视频信息中的视频编码格式确定与目标视频对应的目标抽帧组件,根据目标抽帧组件创建对应的视频抽帧子线程,从而实现针对不同的视频编码格式的视频,采用不同的抽帧组件进行抽帧,避免了现有的采用单一抽帧方式进行抽帧时,由于格式不支持导致的服务出错。
通过试验证明,在视频先发后审业务上,采用现有的视频处理方案对时长为5min的1080p视频进行处理需要120s,而采用本方案对上述视频进行处理仅需要15s,性能提升8倍以上,此外由于提供给算法视频帧信息是无损视频图像信息,算法的精召度提升3个点。
在上述任一实施例的基础上,本发明提供的视频处理方法还可以包括:由主线程获取视频抽帧子线程的运行标志位,所述运行标志位用于标识所述抽帧子线程的运行状态,所述运行状态为视频抽帧中、抽帧异常或抽帧完成,若所述运行标志位标识所述抽帧子线程的运行状态为视频抽帧中,则控制所述抽帧子线程继续运行,若所述运行标志位标识所述抽帧子线程的运行状态为抽帧异常或抽帧完成,则控制所述抽帧子线程停止运行。
在本实施例中,在检测到视频抽帧子线程异常时,及时控制视频抽帧子线程停止运行,避免了由于抽帧失败导致的整体服务阻塞,保证了服务的稳定运行。
在上述任一实施例的基础上,本发明提供的视频处理方法还可以包括:
监测算法处理是否存在异常,当算法处理存在异常时,生成异常控制信息,将所述异常控制信息发送至所述视频抽帧子线程,所述异常控制信息用于控制所述视频抽帧子线程终止对所述目标视频的抽帧。
其中,视频抽帧子线程终止对所述目标视频的抽帧为视频抽帧子线程释放抽帧处理。
在本实施例中,对算法处理过程进行监测,当监测到异常时及时停止视频抽帧,避免了服务阻塞。
本发明实施例还提供了一种视频处理装置,如图6所示,该装置可以包括:第二方面,本申请实施例还提供了一种视频处理装置,包括:
子线程创建模块601,用于创建与目标视频对应的视频抽帧子线程;
主线程模块602,用于将所述目标视频的视频信息发送至所述视频抽帧子线程;
视频抽帧子线程模块603,用于基于所述视频信息对所述目标视频进行抽帧;
所述视频抽帧子线程模块603,还用于将抽帧得到的视频帧图像返回至所述主线程;
所述主线程模块602,还用于对所述视频帧图像进行算法处理。
作为一个实施例,子线程创建模块601具体用于:
获取目标视频的视频信息,所述视频信息中至少包含所述目标视频的视频编码格式;
基于所述视频编码格式确定与所述目标视频对应的目标解码组件;
创建与所述目标抽帧组件对应的视频抽帧子线程,以作为与所述目标视频对应的视频抽帧子线程。
作为一个实施例,基于所述视频编码格式确定与所述目标视频对应的目标抽帧组件,包括:
预先设置第一抽帧组件和第二抽帧组件,并预先设置第一抽帧组件支持的视频编码格式;
将所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式进行匹配;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式相匹配,则确定所述第一抽帧组件为与所述目标视频对应的目标抽帧组件;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式不匹配,则确定所述第二抽帧组件为与所述目标视频对应的目标抽帧组件。
作为一个实施例,所述第一抽帧组件为GPU抽帧组件,所述第二抽帧组件为CPU抽帧组件。
作为一个实施例,若所述第一抽帧组件为与所述目标视频对应的目标抽帧组件,则由所述视频抽帧子线程基于所述目标视频的视频信息对所述目标视频进行抽帧,包括:
由所述视频抽帧子线程将所述目标视频的视频信息发送至所述第一抽帧组件,以使所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧;
所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧,包括:
基于所述视频信息,利用GPU抽帧策略对所述目标视频进行抽帧,得到初始视频帧图像;
对所述初始视频帧图像进行格式转换,得到格式符合预设的算法工具包要求的视频帧图像。
作为一个实施例,所述装置还包括(图6中未示出):
异常处理模块,用于由所述主线程获取所述视频抽帧子线程的运行标志位,所述运行标志位用于标识所述抽帧子线程的运行状态,所述运行状态为视频抽帧中、抽帧异常或抽帧完成;若所述运行标志位标识所述抽帧子线程的运行状态为视频抽帧中,则控制所述视频抽帧子线程继续运行;若所述运行标志位标识所述视频抽帧子线程的运行状态为抽帧异常或抽帧完成,则控制所述视频抽帧子线程停止运行。
作为一个实施例,所述异常处理模块还可以用于:
当所述算法处理存在异常时,生成异常控制信息;
将所述异常控制信息发送至所述视频抽帧子线程,所述异常控制信息用于控制所述视频抽帧子线程终止对所述目标视频的抽帧。
作为一个实施例,所述视频抽帧子线程将抽帧得到的视频帧图像返回至所述主线程,包括:
所述视频抽帧子线程将抽帧得到的视频帧图像存入缓存队列,以使所述主线程从所述缓存队列中抽取所述视频帧图像。
在本申请另一实施例中,还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信;
存储器703,用于存放计算机程序;
处理器701,用于执行存储器703上所存放的程序时,实现如下步骤:
创建与目标视频对应的视频抽帧子线程;
由主线程将所述目标视频的视频信息发送至所述视频抽帧子线程;
由所述视频抽帧子线程基于所述视频信息对所述目标视频进行抽帧,并将抽帧得到的视频帧图像返回至所述主线程;
由所述主线程对所述视频帧图像进行算法处理。
上述电子设备提到的通信总线704可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线704可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口702用于上述电子设备与其他设备之间的通信。
存储器703可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器701可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请另一实施例中,还提供了一种存储介质,所述存储介质上存储有视频处理方法程序,所述视频处理方法程序被处理器执行时实现上述任一实施例所述的视频处理方法的步骤。
本发明实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (11)

1.一种视频处理方法,其特征在于,包括:
创建与目标视频对应的视频抽帧子线程;
由主线程将所述目标视频的视频信息发送至所述视频抽帧子线程;
由所述视频抽帧子线程基于所述视频信息对所述目标视频进行抽帧,并将抽帧得到的视频帧图像返回至所述主线程;
由所述主线程对所述视频帧图像进行算法处理。
2.根据权利要求1所述的方法,其特征在于,创建与目标视频对应的视频抽帧子线程,包括:
获取目标视频的视频信息,所述视频信息中至少包含所述目标视频的视频编码格式;
基于所述视频编码格式确定与所述目标视频对应的目标解码组件;
创建与所述目标抽帧组件对应的视频抽帧子线程,以作为与所述目标视频对应的视频抽帧子线程。
3.根据权利要求2所述的方法,其特征在于,基于所述视频编码格式确定与所述目标视频对应的目标抽帧组件,包括:
预先设置第一抽帧组件和第二抽帧组件,并预先设置第一抽帧组件支持的视频编码格式;
将所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式进行匹配;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式相匹配,则确定所述第一抽帧组件为与所述目标视频对应的目标抽帧组件;
若所述目标视频的视频编码格式与所述第一抽帧组件支持的视频编码格式不匹配,则确定所述第二抽帧组件为与所述目标视频对应的目标抽帧组件。
4.根据权利要求3所述的方法,其特征在于,所述第一抽帧组件为GPU抽帧组件,所述第二抽帧组件为CPU抽帧组件。
5.根据权利要求4所述的方法,其特征在于,若所述第一抽帧组件为与所述目标视频对应的目标抽帧组件,则由所述视频抽帧子线程基于所述目标视频的视频信息对所述目标视频进行抽帧,包括:
由所述视频抽帧子线程将所述目标视频的视频信息发送至所述第一抽帧组件,以使所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧;
所述第一抽帧组件基于所述视频信息对所述目标视频进行抽帧,包括:
基于所述视频信息,利用GPU抽帧策略对所述目标视频进行抽帧,得到初始视频帧图像;
对所述初始视频帧图像进行格式转换,得到格式符合预设的算法工具包要求的视频帧图像。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
由所述主线程获取所述视频抽帧子线程的运行标志位,所述运行标志位用于标识所述抽帧子线程的运行状态,所述运行状态为视频抽帧中、抽帧异常或抽帧完成;
若所述运行标志位标识所述抽帧子线程的运行状态为视频抽帧中,则控制所述视频抽帧子线程继续运行;
若所述运行标志位标识所述视频抽帧子线程的运行状态为抽帧异常或抽帧完成,则控制所述视频抽帧子线程停止运行。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述算法处理存在异常时,生成异常控制信息;
将所述异常控制信息发送至所述视频抽帧子线程,所述异常控制信息用于控制所述视频抽帧子线程终止对所述目标视频的抽帧。
8.根据权利要求1所述的方法,其特征在于,所述视频抽帧子线程将抽帧得到的视频帧图像返回至所述主线程,包括:
所述视频抽帧子线程将抽帧得到的视频帧图像存入缓存队列,以使所述主线程从所述缓存队列中抽取所述视频帧图像。
9.一种视频处理装置,其特征在于,包括:
子线程创建模块,用于创建与目标视频对应的视频抽帧子线程;
主线程模块,用于将所述目标视频的视频信息发送至所述视频抽帧子线程;
视频抽帧子线程模块,用于基于所述视频信息对所述目标视频进行抽帧;
所述视频抽帧子线程模块,还用于将抽帧得到的视频帧图像返回至所述主线程;
所述主线程模块,还用于对所述视频帧图像进行算法处理。
10.一种电子设备,其特征在于,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的数据处理程序,以实现权利要求1-8任一所述的视频处理方法。
11.一种存储介质,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1-8任一所述的视频处理方法。
CN202110055638.5A 2021-01-15 2021-01-15 一种视频处理方法、装置、电子设备及存储介质 Active CN112911306B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110055638.5A CN112911306B (zh) 2021-01-15 2021-01-15 一种视频处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110055638.5A CN112911306B (zh) 2021-01-15 2021-01-15 一种视频处理方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN112911306A true CN112911306A (zh) 2021-06-04
CN112911306B CN112911306B (zh) 2023-04-07

Family

ID=76114748

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110055638.5A Active CN112911306B (zh) 2021-01-15 2021-01-15 一种视频处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN112911306B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113973222A (zh) * 2021-12-02 2022-01-25 成都统信软件技术有限公司 一种视频播放方法、装置及计算设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050226330A1 (en) * 2001-12-21 2005-10-13 Bruls Wilhelmus H A Method and apparatus for motion compensated temporal interpolation of video sequences
CN108377399A (zh) * 2018-03-07 2018-08-07 广州图普网络科技有限公司 实时视频流转码方法、装置及计算机可读存储介质
CN109168013A (zh) * 2018-09-19 2019-01-08 广州华多网络科技有限公司 一种抽帧的方法、装置、设备及计算机可读存储介质
CN110381365A (zh) * 2019-07-02 2019-10-25 北京字节跳动网络技术有限公司 视频抽帧方法、装置及电子设备
CN110582016A (zh) * 2019-09-06 2019-12-17 北京达佳互联信息技术有限公司 视频信息展示方法、装置、服务器及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050226330A1 (en) * 2001-12-21 2005-10-13 Bruls Wilhelmus H A Method and apparatus for motion compensated temporal interpolation of video sequences
CN108377399A (zh) * 2018-03-07 2018-08-07 广州图普网络科技有限公司 实时视频流转码方法、装置及计算机可读存储介质
CN109168013A (zh) * 2018-09-19 2019-01-08 广州华多网络科技有限公司 一种抽帧的方法、装置、设备及计算机可读存储介质
CN110381365A (zh) * 2019-07-02 2019-10-25 北京字节跳动网络技术有限公司 视频抽帧方法、装置及电子设备
CN110582016A (zh) * 2019-09-06 2019-12-17 北京达佳互联信息技术有限公司 视频信息展示方法、装置、服务器及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113973222A (zh) * 2021-12-02 2022-01-25 成都统信软件技术有限公司 一种视频播放方法、装置及计算设备

Also Published As

Publication number Publication date
CN112911306B (zh) 2023-04-07

Similar Documents

Publication Publication Date Title
US20220038724A1 (en) Video stream decoding method and apparatus, terminal device, and storage medium
CN113473126B (zh) 视频流的处理方法、装置、电子设备及计算机可读介质
CN109274973A (zh) 嵌入式arm平台上的快速视频解码方法
GB2560548A (en) Video data processing system
CN112911306B (zh) 一种视频处理方法、装置、电子设备及存储介质
CN111343503B (zh) 视频的转码方法、装置、电子设备及存储介质
US8233534B2 (en) Frame buffer compression and memory allocation in a video decoder
CN114040251A (zh) 音视频播放方法、系统、存储介质及计算机程序产品
WO2023040825A1 (zh) 媒体信息的传输方法、计算设备及存储介质
CN107613302B (zh) 解码方法及装置、存储介质、处理器
CN111010603A (zh) 一种视频缓存转发处理方法及装置
WO2017162015A1 (zh) 一种数据处理方法及装置、存储介质
CN114205662A (zh) iOS端的低延迟视频渲染方法及装置
CN113645448A (zh) 一种适用于指挥调度的视频解码方法和装置
JP4878054B2 (ja) 映像解析装置,映像解析方法および映像解析プログラム
CN111083527A (zh) 应用的视频播放方法、装置、存储介质及电子设备
CN113923507B (zh) Android端的低延迟视频渲染方法及装置
CN115767149A (zh) 一种视频数据的传输方法和装置
CN108933945B (zh) 一种gif图片的压缩方法、装置及存储介质
CN112541391A (zh) 一种基于考试视频分析的违规行为识别方法与系统
CN111510715B (zh) 视频处理方法、系统、计算机设备及存储介质
CN112445624A (zh) 一种面向任务的gpu资源优化配置方法及装置
CN112351338B (zh) 视频处理方法、装置、系统和计算机可读存储介质
CN115243102B (zh) 基于Web技术的视频播放方法、装置、设备以及存储介质
CN115243089B (zh) 一种音视频同步渲染方法及装置、电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant