视频处理方法、装置、电子设备及计算机可读介质转让专利

申请号 : CN201811428036.4

文献号 : CN109379628A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨海胡杰

申请人 : OPPO广东移动通信有限公司

摘要 :

本申请公开了一种视频处理方法、装置、电子设备及计算机可读介质,涉及视频处理技术领域。方法包括:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频;根据所述音频流生成字幕流;将所述字幕流与所述视频流合成为目标视频流;将所述目标视频流在所述屏幕上显示。因此,用户在观看本不带有字幕的在线视频的时候,电子设备能够根据该视频的音频流自动生成字幕并在播放该视频的界面上显示该字幕,以便用户能够更实时与准确的获取视频内容,提高用户体验度。

权利要求 :

1.一种视频处理方法,其特征在于,应用于电子设备,所述电子设备包括屏幕,所述方法包括:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频;

根据所述音频流生成字幕流;

将所述字幕流与所述视频流合成为目标视频流;

将所述目标视频流在所述屏幕上显示。

2.根据权利要求1所述的方法,其特征在于,所述将所述字幕流与所述视频流合成为目标视频流,包括:对所述视频流解码以获取多个视频帧;

对所述多个视频帧执行视频增强处理;

将所述字幕流与视频增强处理后的所述多个视频帧合成以得到目标视频流。

3.根据权利要求2所述的方法,其特征在于,所述电子设备包括中央处理器和图形处理器;所述根据所述音频流生成字幕流,对所述视频流解码以获取多个视频帧,包括:调用所述中央处理器将所述音频流转换为字幕流;

调用所述图形处理器对所述视频流解码以得到多个视频帧。

4.根据权利要求3所述的方法,其特征在于,所述调用所述图形处理器对所述视频流解码以得到多个视频帧,包括:获取所述待播放视频文件的分辨率;

判断所述分辨率是否高于指定分辨率;

若高于,则调用所述图形处理器对所述视频流解码以得到多个视频帧。

5.根据权利要求3所述的方法,其特征在于,所述对所述多个视频帧执行视频增强处理,将所述字幕流与视频增强处理后的所述多个视频帧合成以得到目标视频流,包括:将所述多个视频帧发送至离屏渲染缓冲区;

指示所述图形处理器对所述离屏渲染缓冲区内的多个视频帧执行视频增强处理;

将所述字幕流和经视频增强处理后的多个视频帧发送至帧缓冲区内合成以得到目标视频流。

6.根据权利要求2所述的方法,其特征在于,所述对所述多个视频帧执行视频增强处理;将所述字幕流与视频增强处理后的所述多个视频帧合成以得到目标视频流,包括:在所述多个视频帧中查找所对应的播放时间点与所述待播放视频文件的播放起始时刻之间的时间间隔大于指定时间间隔的视频帧,作为待处理视频帧,其中,所述指定时间间隔为广告结束时间或所述待播放视频文件对应的片头曲结束时间与所述播放起始时刻之间的时间间隔;

对所述待处理视频帧执行视频增强处理;

将所有视频帧与所述字幕流合成以得到目标视频流。

7.根据权利要求2-6任一所述的方法,其特征在于,所述对所述多个视频帧执行视频增强处理,包括:对所述多个视频帧的图像参数优化,其中,所述图像参数优化用于优化所述视频帧的视频画质。

8.一种视频处理装置,其特征在于,应用于电子设备,所述电子设备包括屏幕,所述视频处理装置包括:解析单元,用于解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频;

生成单元,用于根据所述音频流生成字幕流;

合成单元,用于将所述字幕流与所述视频流合成为目标视频流;

显示单元,用于将所述目标视频流在所述屏幕上显示。

9.一种电子设备,其特征在于,包括:一个或多个处理器;

存储器;

屏幕;

一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-7任一项所述的方法。

10.一种计算机可读介质,其特征在于,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行所述权利要求1-7任一项所述方法。

说明书 :

视频处理方法、装置、电子设备及计算机可读介质

技术领域

[0001] 本申请涉及视频处理技术领域,更具体地,涉及一种视频处理方法、装置、电子设备及计算机可读介质。

背景技术

[0002] 随着电子技术和信息技术的发展,越来越多的设备能够播放视频。设备在视频播放的过程中,需要对视频执行解码、渲染以及合成等操作,再在显示屏上显示,但是,一些视频在播放的时候没有字幕,导致观看者会错失一些重要信息而降低用户体验度。

发明内容

[0003] 本申请提出了一种视频处理方法、装置、电子设备及计算机可读介质,以改善上述缺陷。
[0004] 第一方面,本申请实施例提供了一种视频处理方法,应用于电子设备,所述电子设备包括屏幕。所述方法包括:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频;根据所述音频流生成字幕流;将所述字幕流与所述视频流合成为目标视频流;将所述目标视频流在所述屏幕上显示。
[0005] 第二方面,本申请实施例还提供了一种视频处理装置,应用于电子设备,所述电子设备包括屏幕。所述视频处理装置包括:解析单元、生成单元、合成单元和显示单元。解析单元,用于解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。生成单元,用于根据所述音频流生成字幕流。合成单元,用于将所述字幕流与所述视频流合成为目标视频流。显示单元,用于将所述目标视频流在所述屏幕上显示。
[0006] 第三方面,本申请实施例还提供了一种电子设备,包括:一个或多个处理器;存储器;屏幕;一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述方法。
[0007] 第四方面,本申请实施例还提供了一种计算机可读取存储介质,计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述方法。
[0008] 本申请提供的视频处理方法、装置、电子设备及计算机可读介质,在获取到在线的待播放视频之后,将该待播放视频解析以获取到视频流和音频流,再根据该音频流生成字幕流,并将该字幕流与视频流合成之后,以获得目标视频流,则目标视频流内就含有字幕,再将目标视频流在屏幕上显示。因此,用户在观看本不带有字幕的在线视频的时候,电子设备能够根据该视频的音频流自动生成字幕并在播放该视频的界面上显示该字幕,以便用户能够更实时与准确的获取视频内容,提高用户体验度。

附图说明

[0009] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0010] 图1示出了本申请一实施例提供的视频播放架构的框图;
[0011] 图2示出了本申请实施例提供的图像渲染架构的框图;
[0012] 图3示出了本申请一实施例提供的视频处理方法的方法流程图;
[0013] 图4示出了本申请另一实施例提供的视频处理方法的方法流程图;
[0014] 图5示出了本申请实施例提供的待优化类型选择界面的示意图;
[0015] 图6示出了本申请实施例提供的待优化类型选择界面的隐藏效果的示意图;
[0016] 图7示出了本申请又一实施例提供的视频处理方法的方法流程图;
[0017] 图8示出了本申请再又一实施例提供的视频处理方法的方法流程图;
[0018] 图9示出了本申请一实施例提供的视频处理装置的模块框图;
[0019] 图10示出了本申请实施例提供的电子设备的结构框图;
[0020] 图11示出了本申请实施例的用于保存或者携带实现根据本申请实施例的视频处理方法的程序代码的存储单元。

具体实施方式

[0021] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0022] 请参阅图1,示出了视频播放架构的框图。具体地,操作系统在获取到待播放的数据的时候,接下来的工作就是解析音视频数据了。一般的视频文件都有视频流和音频流两部分组成,不同的视频格式音视频的封装格式肯定不一样。将音频流和视频流合成文件的过程称为muxer,反之从媒体文件中分离音频流和视频流的过程称为demuxer.播放视频文件就需要从文件流中分离出音频流和视频流,分别对其进行解码,解码后的视频帧可以直接渲染,音频帧可以送到音频输出设备的缓冲区进行播放,当然,视频渲染和音频播放的时间戳一定要控制同步。
[0023] 具体地,视频解码可以包括硬解码和软解码,硬件解码是将原来全部交由中央处理器(Central Processing Unit,CPU)来处理的视频数据的一部分交由图像处理器(Graphics Processing Unit,GPU)来做,而GPU的并行运算能力要远远高于CPU,这样可以大大的降低对CPU的负载,CPU的占用率较低了之后就可以同时运行一些其他的程序了,当然,对于较好的处理器来说,比如i5 2320,或者AMD任何一款四核心处理器来说,硬解和软件依据需求而选定。
[0024] 具体地,如图1所示,多媒体框架通过与客户端的API接口获取客户端待播放的视频文件,并交由视频解码器,其中,多媒体框架(Media Framework)为Android系统中多媒体框架,MediaPlayer、MediaPlayerService和Stagefrightplayer三个部分构成了Android多媒体的基本框架。多媒体框架部分采用了C/S的结构,MediaPlayer作为C/S结构的Client端,MediaPlayerService和Stagefrightplayer作为C/S结构Server端,承担着播放多媒体文件的责任,通过Stagefrightplayer,Server端完成Client端的请求并作出响应。Video Decode是一款集成了最常用的音频和视频解码与播放的超级解码器,用于将视频数据解码。
[0025] 软解码,即通过软件让CPU来对视频进行解码处理,解码之后再调用GPU对视频渲染合并之后在屏幕上显示。而硬解码,指不借助于CPU,而通过专用的子卡设备来独立完成视频解码任务。
[0026] 不论是硬解码还是软解码,在将视频数据解码之后,会将解码后的视频数据发送至图层传递模块(SurfaceFlinger),由SurfaceFlinger将解码后的视频数据渲染和合成之后,在显示屏上显示。其中,SurfaceFlinger是一个独立的Service,它接收所有Window的Surface作为输入,根据ZOrder、透明度、大小、位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由HWComposer或OpenGL生成最终的显示Buffer,然后显示到特定的显示设备上。
[0027] 如图1所示,软解码中,CPU将视频数据解码之后交给SurfaceFlinger渲染和合成,而硬解码由GPU解码之后,交由SurfaceFlinger渲染和合成。而SurfaceFlinger会调用GPU实现图像的渲染和合成,并在显示屏上显示。
[0028] 作为一种实施方式,图像渲染的过程如图2所示,CPU获取客户端发送的待播放的视频文件,解码之后获取解码之后的视频数据,将视频数据发送至GPU,GPU渲染完成后将渲染结果放入帧缓冲区(如图2中的FrameBuffer),随后视频控制器会按照HSync信号逐行读取帧缓冲区的数据,经过数模转换传递给显示器显示。
[0029] 然后,用户在使用电子设备播放一些无字幕的视频文件时,由于没有字幕,在环境比较嘈杂或者播放视频的声音过小的时候,用户可能会遗漏一些视频内容,例如,视频中的某些对白无法听清,从而降低了用户体验,而对于一些用户无法听懂的语音,例如,视频文件中的对白是某个方言或者外语,用户体验会极差。
[0030] 因此,为了克服上述缺陷,如图3所示,本申请实施例提供了一种视频处理方法,应用于电子设备,该电子设备还包括屏幕,于本申请实施例中,该方法包括:S301至S304。
[0031] S301:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。
[0032] 其中,所述待播放视频文件为在线视频,而待播放视频文件为一个在线视频数据,该在线视频数据对应一个视频文件,而该在线视频数据为该视频文件已发送至电子设备内的数据,例如,该视频文件是某某电影,电子设备所接收的是该某某电影的播放时间0至10分钟的数据,则该某某电影对应的在线视频数据为某某电影的播放时间0至10分钟的数据。
[0033] 具体地,该解析待播放视频文件获取音频流和视频流的具体实施方式可以是:获取待播放视频文件;解析待播放视频文件获取音频流和视频流。
[0034] 作为一种实施方式,电子设备内包括多个能够播放视频文件的客户端,该客户端内设置有视频列表界面,客户端的视频列表界面内显示有多个视频对应的显示内容,多个视频对应的显示内容包括每个视频对应的缩略图,该缩略图可以作为一个触摸按键使用,用户点击该缩略图,客户端能够检测到用户所选点击的缩略图,也就能够确定欲播放的待播放的在线视频文件。
[0035] 客户端响应用户在视频列表内选中的视频,进入视频的播放界面,点击该播放界面的播放按钮,客户端通过对用户触控操作的监听,能够检测到用户当前所点击的是什么类型的视频,具体地,播放按钮设置有预设属性,检测到所获取的触控操作对应的播放按钮的属性,就能够确定用户所选中的待播放视频。
[0036] 然后,电子设备在获取到该待播放视频文件的标识的时候,根据该标识在电子设备的本地存储空间内查找是否包括该标识,如果包括,则判定该待播放视频文件存储在本地,如果不包括,则根据该标识对应的网络地址,由该网络地址对应的服务器内下载该待播放视频文件。
[0037] 处理器调用播放模块将待播放视频文件解析,从而获取该待播放视频文件对应的视频流和音频流。其中,播放模块可以是安卓系统内的MediaExtractor模块,也可以是FFmpeg模块,其中,FFmpeg模块是一个开源的跨平台的视频和音频流框架,属于自由软件,采用LGPL或GPL许可证(依据选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了丰富的音频/视频编解码库libavcodec。
[0038] S302:根据所述音频流生成字幕流。
[0039] 具体地,可以提取该音频流内的语音数据的文字信息,具体地,可以是先对语音信号作前端处理,得到样本的特征,然后送入统计模型,之后得到输出后的文本信息,其中,该统计模型可以是基于隐马尔可夫理论的模型,用于对样本特征进行分类,确定该样本属于哪个文本。
[0040] 在一种实施方式中,用户可以通过电子设备中的客户端通过语音助手输入语音信息,电子设备直接对语音信息进行处理。
[0041] 在另一种实施方式中,用户可以通过电子设备中的客户端通过语音助手发送语音信息给服务器,由服务器对语音信息进行处理。
[0042] 另外,根据所述音频流生成字幕流的具体实施方式为:判断所述待播放视频文件的类型是否为直播类视频,则根据所述音频流生成字幕流。其中,判断视频的类型是否为直播类视频的方式可以是,在上述客户端的视频列表内确定该待播放视频文件是否来自某个直播间,例如,该客户端具有播放直播视频的功能,则该视频列表可以是各个直播间对应的缩略图,用户点击某个直播间之后,则该直播间对应的视频就为待播放视频文件,因此,由于直播类视频无法后退,则用户如果在观看直播类视频的时候,能够看到主播的语音对应的字幕,能够提高用户体验度,避免用户错失一些信息。
[0043] 电子设备在获取到音频流对应的文本信息之后,根据该音频流内每个语音对应的时间点,能够使得每个文本都对应一个时间点,而时间点有对应一帧图像,从而能够将对应统一帧图像的多个文本生成该帧图像对应的字幕,进而制作成字幕流。
[0044] 另外,可以在电子设备内安装具有字幕制作功能的字幕客户端,电子设备在获取到音频流之后,将音频流导入到字幕客户端就能够得到字幕流。
[0045] S303:将所述字幕流与所述视频流合成为目标视频流。
[0046] 字幕叠加,最基本的一种是在静态图像上进行的,一般就是直接在图像上输出标准的字符串,以合成新的图像帧;而视频上的字幕叠加,则是在连续的图像帧序列上进行的,单帧上的叠加与静态图像上的叠加类似。本文所要讲述的卡拉OK字幕叠加,就是一种在视频上进行的字幕叠加。
[0047] 则具体地,将字幕流中的多个字幕图片按照所对应的图像帧逐个与视频流内的图像帧叠加,形成新的图像帧,而多个图像帧与播放时间点结合构成目标视频流。
[0048] S304:将所述目标视频流在所述屏幕上显示。
[0049] 基于所述屏幕的刷新频率逐帧将目标视频流在屏幕上显示。
[0050] 具体地,可以是处理器将字幕流与所述视频流发送至图2所示的帧缓冲区内合成为目标视频流,然后,基于所述屏幕的刷新频率由帧缓冲区内逐帧将目标视频流对应的图像在屏幕上显示。
[0051] 屏幕的刷新频率是图像在屏幕上更新的速度,也即屏幕上的图像每秒钟出现的次数,电子设备在获取到待播放的在线视频数据之后,将该在线视频数据解码以获取到对应的多帧图像数据,并存入帧缓冲区,然后,根据屏幕的刷新频率由所述帧缓冲区内逐帧读取多帧图像数据,并经渲染合成处理后在所述屏幕上显示。
[0052] 另外,为了考虑视觉效果,可以对视频流进行视频增强处理,具体地,如图4所示,该方法包括:S401至S406。
[0053] S401:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。
[0054] S402:根据所述音频流生成字幕流。
[0055] S403:对所述视频流解码以获取多个视频帧。
[0056] 具体地,可以采用上述的软解码或者硬解码对视频文件解码,在解码之后就能够获取视频文件对应的待渲染的多个视频帧。
[0057] 在获取到视频流和音频流之后,也可以通过获取该视频流和音频流的扩展名而确定该视频流的类型和所述音频流的类型。根据所述视频流的类型为所述视频流配置视频解码器。
[0058] 预先获取有视频流的类型与视频解码器的标识的第一对应关系,该第一对应关系可以由用户手动输入,例如,根据目前已经确定能够解码该类型的视频文件的视频解码器的介绍而输入该对应关系内,例如,由一个网络服务器内获取该第一对应关系,而该网路服务器内统计了每种类型的视频流能够被解码的解码器的标识。
[0059] 作为一种实施方式,客户端响应用户在视频列表内选中的视频,进入视频的播放界面,点击该播放界面的播放按钮,客户端通过对用户触控操作的监听,能够检测到用户当前所点击的视频文件,然后,客户端将视频文件发送至CPU,由CPU选择硬解码或者软解码对该视频文件进行解码。
[0060] S404:对所述多个视频帧执行视频增强处理。
[0061] 其中,对所述多个视频帧执行视频增强处理具体包括对所述多个视频帧的图像参数优化,其中,所述图像参数优化用于优化所述视频帧的视频画质。视频画质包括视频的清晰度、锐度、镜头畸变、色彩、解析度、色域范围以及纯度等决定视频观看效果的参数。则不同参数的组合能够实现不同的显示增强效果,例如,以人像所在的位置为中心实现桶型畸变的效果,并且将当前画面的色调修改为灰色,则能够营造一种恐怖氛围的效果。
[0062] 于本申请实施中,图像参数优化包括曝光度增强、去噪、边缘锐化、对比度增加或饱和度增加的至少一种。
[0063] 其中,曝光度增强,用于提高图像的亮度,则可以通过图像的直方图,将亮度值交底的区域增加亮度值,另外,也可以是通过非线性叠加,增加图像亮度,具体地,I表示要处理的较暗图像,T表示处理后的比较亮的图像,则曝光度增强的方式为T(x)=I(x)+(1-I(x))*I(x)。其中,T和I都是[0,1]取值的图像。如果一次效果不好算法可以多次迭代。
[0064] 其中,对图像数据去噪用于去除图像的噪声,具体地,图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声,机械噪声,信道噪声和其他噪声。因此,为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。从噪声的概率分布情况来看,可分为高斯噪声、瑞利噪声、伽马噪声、指数噪声和均匀噪声。
[0065] 具体地,可以通过高斯滤波器对图像去噪,其中,高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像模糊程度较小。
[0066] 例如,产生一个5×5的高斯滤波窗口,以模板的中心位置为坐标原点进行取样。将模板各个位置的坐标带入高斯函数,得到的值就是模板的系数。再将该高斯滤波窗口与图像卷积就能够对图像去噪。
[0067] 其中,边缘锐化用于使模糊的图像变得更加清晰起来。图像锐化一般有两种方法:一种是微分法,另外一种是高通滤波法。
[0068] 其中,对比度增加用于增强图像的画质,使得图像内的颜色更加鲜明,具体地,对比度拉伸是图像增强的一种方法,也属于灰度变换操作。通过灰度变换,将灰度值拉伸到整个0-255的区间,那么其对比度显然是大幅增强的。可以用如下的公式来将某个像素的灰度值映射到更大的灰度空间:
[0069] I(x,y)=[(I(x,y)-Imin)/(Imax-Imin)](MAX-MIN)+MIN;
[0070] 其中Imin,Imax是原始图像的最小灰度值和最大灰度值,MIN和MAX是要拉伸到的灰度空间的灰度最小值和最大值。
[0071] 具体地,用户可以在电子设备内为待播放的视频文件设置待优化类型,其中,待优化类型可以是目标物的类型,例如,可以是男性、女性、天空、山川、河流或者招牌等。具体地,可以是在视频播放界面时,用户输入待优化类型,如图5所示,在该视频界面上显示有视频增强的总开关501和各个目标物类型的子开关502,具体地,视频增强的总开关501用于开启或关闭视频增强的功能,其中,视频增强的功能用于对该视频文件的图像数据优化,当视频增强的总开关501开启的时候,用户能够选择开启某个或某些目标物类型的子开关502,如图5所示,类型1对应一个目标物类型,例如是男性,类型2对应另一个目标物类型,例如是女性,其中,类型1和类型2为示例性的文字,具体地,在实际使用中可以根据具体的目标物类型而更改文字,例如,将类型1更改为男性角色。
[0072] 在视频增强的总开关501开启的时候,用户选择开启所需要优化的待优化的目标物的类型,即开启所需优化的类型的子开关502,则电子设备能够获取该视频文件对应的待优化类型。
[0073] 而在视频增强的总开关501关闭的时候,待优化类型选择窗口内的各类型对应的子开关502是灰色的,即无法选择开启或关闭,即不响应应用对该子开关的操作。
[0074] 另外,图5所示的待优化类型选择界面可以被隐藏,具体地,如图6所示,在该待优化类型选择窗口的边侧设置有滑动按钮503,通过该滑动按钮503可以将该待优化类型选择窗口隐藏和滑出,作为一种实施方式,可以是在待优化类型选择窗口处于隐藏的状态时,点击该滑动按钮503能够将待优化类型选择窗口滑出,而在待优化类型选择窗口处于滑出的状态时,点击该滑动按钮503能够将待优化类型选择窗口隐藏。
[0075] 另外,在选择一个待优化类型的时候,用户能够输入优化程度指示,基于该优化程度指示,能够调整该优化类型的优化程度,例如,选中曝光度增强,则用户输入曝光度增强程度指示,例如,用过输入界面,也可以通过按下音量键,比如,每按下一次加音量键则将曝光度程度增加2%,对应地,每按下一次减音量键则将曝光度程度降低2%,则用户能够自由调节优化程度。
[0076] S405:将所述字幕流与视频增强处理后的所述多个视频帧合成以得到目标视频流。
[0077] S406:将所述目标视频流在所述屏幕上显示。
[0078] 由此,不仅能够在播放在线视频的时候显示字幕,而且还能够对视频优化,实现超清视效的效果。
[0079] 另外,于本申请实施例中,处理器可以包括中央处理器和图像处理器,则可以由中央处理器执行上述方法,而考虑到在播放在线视频的时候,如果对视频处理的速度过慢,会造成视频播放过程中的卡顿,则可以由中央处理器和图形处理器分工处理,具体地,如图7所示,该方法包括:S701至S707。
[0080] S701:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。
[0081] S702:调用所述中央处理器将所述音频流转换为字幕流。
[0082] 具体地,电子设备内包括字幕制作模块,该字幕制作模块存储与电子设备的存储器内,当电子设备要执行将所述音频流转换为字幕流时,由客户端发送一个指令至中央处理器,该指令只是该中央处理器调用该字幕制作模块执行音频流转换为字幕流。具体地,该字幕制作模块可以是一个程序模块,也可以是安装在中央处理器内的电路单元。
[0083] S703:调用所述图形处理器对所述视频流解码以得到多个视频帧。
[0084] 具体地,解码方式包括硬解码和软解码,则客户端可以选择硬解码或者软解码对该视频文件进行解码。
[0085] 于本申请实施中,采用硬解码的方式对视频流解码以得到多个视频帧,即调用图形处理器的硬件模块对该视频流解码以得到多个视频帧。
[0086] 另外,考虑到图形处理器在处理高分辨率的时候,处理的速度明显优于中央处理器,并且低分辨率的视频的处理效率很快,即视频增强过程中所消耗的时间很少,则采用中央处理器或者图形处理器来处理均可以,则调用所述图形处理器对所述视频流解码以得到多个视频帧的实施方式可以是:获取所述待播放视频文件的分辨率;判断所述分辨率是否高于指定分辨率;若高于,则调用所述图形处理器对所述视频流解码以得到多个视频帧,若低于或等于,则调用所述图形处理器或中央处理器对所述视频流解码以得到多个视频帧。
[0087] 其中,视频文件的分别率反映了待播放视频文件的每帧图像的图像大小。而指定分辨率可以根据实际使用而设定,例如,可以是1280×720,则如果待播放视频文件的分辨率大于1280×720的分辨率,则调用所述图形处理器对所述视频流解码以得到多个视频帧,如果待播放视频文件的分辨率小于或等于1280×720的分辨率,则可以使用中央处理器或图形处理器,即在高分辨率的情况下,更推荐使用图形处理器而在低分辨率的情况下,中央处理器和图形处理器任意使用就可以。
[0088] 另外,考虑到在使用中央处理器播放视频文件的时候,由于中央处理器除了需要处理视频文件,还需要执行其他电子设备的其他操作指令,而各个应用程序都换占用中央处理器的一定的资源,即用占用CPU的使用率,则可能会导致CPU现在的负载过高,不适于处理视频文件,具体地,如果分辨率小于或等于指定分辨率,获取所述中央处理器的使用率;判断所述中央处理器的使用率是否小于指定数值;若小于指定数值,则调用所述图形处理器对所述视频流解码以得到多个视频帧。
[0089] 则具体地,中央处理器的使用率可以通过查看电子设备的任务管理器而获取,例如,在安卓系统下,通过adb shell top指令获取CPU的使用率。其中,指定数值可以是用户设定的使用率,例如,指定数值可以是60%,假设CPU的当前的使用率为40%,则40%小于60%,判定中央处理器的使用率小于指定数值,假如CPU的当前的使用率为70%,则70%大于60%,判定中央处理器的使用率大于指定数值。
[0090] 而如果中央处理器的使用率小于指定数值,则表示CPU当前资源比较富裕,则可以使用CPU处理待播放视频文件,而如果中央处理器的使用率大于或等于指定数值,则表示CPU当前资源比较匮乏,则使用CPU处理待播放视频文件。
[0091] 另外,由于CPU的使用率是当前启动的应用程序的使用率之和,则能够获取到当前每个所开启的应用程序的使用率,判断当前所开启的应用程序中是否存在与预设应用程序匹配的应用程序,其中,预设应用程序为允许系统在用户未授权的情况下将应用程序关闭的应用程序,如果存在,则将与预设应用程序匹配的应用程序的关闭,然后再获取CPU当前的使用率作为CPU的使用率,并返回执行判断所述中央处理器的使用率是否小于指定数值的操作。
[0092] 具体地,电子设备内预先存储有预设应用程序的列表,在该预设应用程序的列表内包括多个指定应用程序的标识,其中,指定应用程序为用户授权的允许系统在用户未授权的情况下将应用程序关闭的应用程序,具体地,可以是用户手动输入该指定应用程序的标识。
[0093] 则扫描当前系统进程中每个进程对应的应用程序以及每个进程的CPU使用率,并获取CPU当前的使用率,在所扫描到的所有应用程序中查找与预设应用程序匹配的应用程序,作为待处理应用程序,将待处理应用程序关闭并将待处理应用程序对应的进程杀死,然后,获取在待处理应用程序对应的进程杀死之后的CPU的使用率,作为更新使用率,将更新使用率作为CPU新的使用率,判断CPU新的使用率是否小于指定数值;若小于指定数值,则调用所述图形处理器对所述视频流解码以得到多个视频帧,若大于或等于指定数值,则调用所述图形处理器或中央处理器对所述视频流解码以得到多个视频帧。
[0094] 需要说明的是,在一些实施方式中,如果选择调用图形处理器对待播放视频文件解码,则后续对该待播放视频文件对应的多个视频帧的视频增强处理也由图形处理器执行,而如果选择调用中央处理器对待播放视频文件解码,则后续对该待播放视频文件对应的多个视频帧的视频增强处理也由中央处理器执行。
[0095] S704:将所述多个视频帧发送至离屏渲染缓冲区。
[0096] 作为一种实施方式,预先在GPU内设置一个离屏渲染缓冲区,具体地,GPU会调用渲染客户端模块对待渲染的多帧图像数据渲染合成之后发送至显示屏上显示,具体地,该渲染客户端模块可以是OpenGL模块。OpenGL渲染管线的最终位置是在帧缓冲区中。帧缓冲区是一系列二维的像素存储数组,包括了颜色缓冲区、深度缓冲区、模板缓冲区以及累积缓冲区。默认情况下OpenGL使用的是窗口系统提供的帧缓冲区。
[0097] OpenGL的GL_ARB_framebuffer_object这个扩展提供了一种方式来创建额外的帧缓冲区对象(Frame Buffer Object,FBO)。使用帧缓冲区对象,OpenGL可以将原先绘制到窗口提供的帧缓冲区重定向到FBO之中。
[0098] 则通过FBO在帧缓冲区之外再设置一个缓冲区,即离屏渲染缓冲区。然后,将所获取的多个视频帧存储至离屏渲染缓冲区。具体地,离屏渲染缓冲区可以是对应图像处理器的一个存储空间,即离屏渲染缓冲区本身没有用于存储图像的空间,而是与图像处理器内的一个存储空间映射之后,图像实际存储在离屏渲染缓冲区对应的图像处理器内的一个存储空间内。
[0099] 将多个视频帧与离屏渲染缓冲区绑定的方式,就能够将多个视频帧存储至离屏渲染缓冲区,即在离屏渲染缓冲区能够查找到多个视频帧。
[0100] S705:指示所述图形处理器对所述离屏渲染缓冲区内的多个视频帧执行视频增强处理。
[0101] 将视频增强算法对应的特征数据与待渲染的多个视频帧卷积,以对多个视频帧优化,具体地,通过将所述渲染对象和数据纹理对象渲染,对所述离屏渲染缓冲区内的多个视频帧进行优化,即执行渲染到纹理(Render To Texture,RTT)的操作。其中,渲染对象就是多个视频帧,具体地,可以通过渲染对象将多个视频帧存储到FBO内,其中,渲染对象可以作为一个变量,将多个视频帧赋给渲染对象,再将渲染对象于FBO绑定,就可以实现将多个视频帧存储至离屏渲染缓冲区。例如,在FBO内设置一个句柄,该句柄指向多个视频帧,则该句柄就可以是渲染对象。
[0102] 其中,将视频增强算法赋值给纹理对象,其中,视频增强算法对应的特征数据即为视频增强算法的参数,例如,去噪中的中值滤波的各个参数值。则视频增强算法的具体操作可以参考上述实施例。
[0103] 作为一种实施方式,还可以根据待播放视频文件的分辨率确定该待播放视频文件对应的优化策略。具体地,判断所述待播放视频文件的分辨率是否大于预设分别率,如果小于,则为所述待播放视频文件配置的优化策略包括去噪和边缘锐化,如果大于或等于,则为所述待播放视频文件配置的优化策略包括饱和度增加。
[0104] 在另一些实施例中,判断所述待播放视频文件的分辨率是否大于预设分别率,如果小于,则为所述待播放视频文件配置第一优化策略,如果大于或等于,则为所述待播放视频文件配置第二优化策略。
[0105] 其中,第一优化策略和第二优化策略均包括曝光度增强、去噪、边缘锐化、对比度增加和饱和度增加等5个优化项,而第一优化策略和第二优化策略所对应的每个优化项的优化级别不同,例如,第一优化策略中的曝光度增强的优化级别为b1,去噪的优化级别为q1,边缘锐化的优化级别为r1,对比度增加的优化级别为d1以及饱和度增加的优化级别为h1。第二优化策略中的曝光度增强的优化级别为b2,去噪的优化级别为q2,边缘锐化的优化级别为r2,对比度增加的优化级别为d2以及饱和度增加的优化级别为h2,其中,q1大于q2,r1大于r2,h1小于h2。例如,每个级别采用0-9的数值表示级别,数值越大级别越高,则优化程度越高,以曝光度为例,曝光度的优化级别越高,所提高图像的亮度越高。则第一优化策略中的去噪和边缘锐化的优化级别分别为8和9,而第二优化策略中的去噪和边缘锐化的优化级别分别为3和4,则待播放视频文件的视频帧的分辨率小于预设分别率的情况下,与待播放视频文件的视频帧的分辨率大于或等于预设分别率的情况相比,强化去噪和边缘锐化,同理,待播放视频文件的视频帧的分辨率大于或等于预设分别率的情况与待播放视频文件的视频帧的分辨率小于预设分别率的情况相比,强化饱和度增加以及细节增强。
[0106] S706:将所述字幕流和经视频增强处理后的多个视频帧发送至帧缓冲区内合成以得到目标视频流。
[0107] 其中,帧缓冲区对应于屏幕,用于存放需要在屏幕上显示的数据,例如图2所示的Framebuffer,Framebuffer是出现在操作系统内核当中的一种驱动程序接口。以安卓系统为例,Linux是工作在保护模式下,所以用户态进程是无法像DOS系统那样,使用显卡BIOS里提供的中断调用来实现直接将数据写入并在屏幕上显示,Linux抽象出Framebuffer这个设备来供用户进程实现直接将数据写入并在屏幕上显示。Framebuffer机制模仿显卡的功能,可以通过Framebuffer的读写直接对显存进行操作。具体地,可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写入的数据可以在屏幕上显示。
[0108] 则帧缓冲区可以看作是一个存放数据的空间,CPU或者GPU将要显示的数据放入该帧缓冲区,而Framebuffer本身不具备任何运算数据的能力,由视频控制器按照屏幕刷新频率读取Framebuffer内的数据在屏幕上显示。
[0109] 具体地,将渲染对象绑定到Framebuffer,则此时的渲染对象已经被视频增强算法优化,即渲染对象为优化后的待播放视频文件的视频帧。则将优化后的待播放视频文件的视频帧发送至Framebuffer以存储。
[0110] 然后,视频增强后的所述待播放视频文件的视频帧和字幕流均存储至帧缓冲区,则中央处理器在帧换成去内将待播放视频文件的视频帧和字幕流,以获得目标视频流。
[0111] S707:将所述目标视频流在所述屏幕上显示。
[0112] 作为一种实施方式,图像处理器会根据屏幕的刷新频率由所述帧缓冲区内逐帧读取图像数据,并经渲染合成处理后在所述屏幕上显示。
[0113] 由此,通过离屏渲染的方式,将待播放视频文件的多个视频帧优化之后再发送至帧缓冲区,以使帧缓冲区内的数据为视频增强之后的数据,与将视频帧存储至帧缓冲区,并在帧缓冲区内执行视频增强操作,然后再在帧缓冲区内将将所述字幕流存储至视频增强后的所述视频帧合成为目标视频流的操作方式相比,能够避免在帧缓冲区内的视频帧还未优化,就由于屏幕刷新评率的到来而直接在屏幕上显示,而影响用户体验。
[0114] 需要说明的是,上述步骤中为详细描述的部分,可参考前述实施例,在此不再赘述。
[0115] 另外,视频播放的时候,在播放正片的时间点之前还包括广告内容和片头曲等视频内容,则在正片之前的时间段内,可以不执行视频增强处理,具体地,请参阅图8,该方法包括:S801至S807。
[0116] S801:解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。
[0117] S802:根据所述音频流生成字幕流。
[0118] S803:对所述视频流解码以获取多个视频帧。
[0119] S804:在所述多个视频帧中查找所对应的播放时间点与所述待播放视频文件的播放起始时刻之间的时间间隔大于指定时间间隔的视频帧,作为待处理视频帧。
[0120] 其中,所述指定时间间隔可以是一个预设的时间间隔,该指定时间间隔的时间长度大于广告播放时间,具体地,该广告播放时间可以是能够播放该待播放视频文件的客户端在视频播放之前所添加的广告内容所经历的最长的时间段,例如,在一定时间段内,统计每个视频所添加的广告内容的持续时间长度,记为广告时长,根据所统计的所有广告时长确定该指定时间间隔,例如,可以将所统计的所有广告时长中时间长度最长的广告时长作为指定时间间隔,也可以是,计算所统计的所有广告时长的平均值,将该平均值作为指定时间间隔。
[0121] 另外,还可以确定当前登录客户端的用户等级,根据该用户等级设置指定时间间隔,具体地,确定该用户等级是否为预设等级,如果是,则设置指定时间间隔为第一时间长度,如果不是,则设定指定时间间隔为第二时间长度,且第一时间长度小于第二时间长度,其中,该预设等级对应的用户有跳过广告的权限。则第一时间长度可以是一个很小的数值,例如,0至2秒钟,具体地,可以是1秒。
[0122] 另外,所述指定时间间隔为广告结束时间或所述待播放视频文件对应的片头内容结束时间与所述播放起始时刻之间的时间间隔。则,广告结束时间可以参考上述实施方式获取,而待播放视频文件对应的片头内容结束时间,可以由用户输入,其中,该片头内容可以是片头曲也可以是植入在待播放视频文件内的片头广告,例如,是电影片头各个电影公司或者赞助商的宣传广告。
[0123] 则在对待播放视频文件做视频增强处理的时候,记录播放起始时刻,则该播放起始时刻可以是用户第一次点击播放该待播放视频文件的播放按钮的时间点,而待播放视频文件内的每个视频帧的播放时间点可以根据各帧的播放次序和帧率而获得,例如,帧率为10帧/秒,即每秒中可以播放10帧图像,则第一帧的播放时间点为播放起始时刻+0.1秒,第二帧图像的播放时间点为播放起始时刻+0.2秒,依次类推每帧图像的播放时间点都能够获取。则假设指定时间点为60秒,则在播放起始时刻+60秒的时间段内,对应的视频帧不执行视频增强操作。而在播放起始时刻+60秒之后的时间段内的播放时间点对应的视频帧记为待处理视频帧。
[0124] S805:对所述待处理视频帧执行视频增强处理。
[0125] S806:将所有视频帧与所述字幕流合成以得到目标视频流。
[0126] S807:将所述目标视频流在所述屏幕上显示。
[0127] 需要说明的是,上述步骤中为详细描述的部分,可参考前述实施例,在此不再赘述。
[0128] 请参阅图9,其示出了本申请实施例提供的一种视频处理装置900的结构框图,该装置可以包括:解析单元、生成单元、合成单元和显示单元。
[0129] 解析单元,用于解析待播放视频文件获取音频流和视频流,所述待播放视频文件为在线视频。
[0130] 生成单元,用于根据所述音频流生成字幕流。
[0131] 具体地,生成单元还用于调用所述中央处理器将所述音频流转换为字幕流。
[0132] 合成单元,用于将所述字幕流与所述视频流合成为目标视频流。
[0133] 合成单元还用于对所述视频流解码以获取多个视频帧;对所述多个视频帧执行视频增强处理;将所述字幕流与视频增强处理后的所述多个视频帧合成以得到目标视频流。
[0134] 进一步地,合成单元还用于调用所述图形处理器对所述视频流解码以得到多个视频帧。
[0135] 进一步地,合成单元还用于获取所述待播放视频文件的分辨率;判断所述分辨率是否高于指定分辨率;若高于,则调用所述图形处理器对所述视频流解码以得到多个视频帧。
[0136] 进一步地,合成单元还用于将所述多个视频帧发送至离屏渲染缓冲区;指示所述图形处理器对所述离屏渲染缓冲区内的多个视频帧执行视频增强处理;将所述字幕流和经视频增强处理后的多个视频帧发送至帧缓冲区内合成以得到目标视频流。
[0137] 进一步地,合成单元还用于在所述多个视频帧中查找所对应的播放时间点与所述待播放视频文件的播放起始时刻之间的时间间隔大于指定时间间隔的视频帧,作为待处理视频帧,其中,所述指定时间间隔为广告结束时间或所述待播放视频文件对应的片头曲结束时间与所述播放起始时刻之间的时间间隔;对所述待处理视频帧执行视频增强处理;将所有视频帧与所述字幕流合成以得到目标视频流。
[0138] 显示单元,用于将所述目标视频流在所述屏幕上显示。
[0139] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0140] 在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。
[0141] 另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0142] 请参考图10,其示出了本申请实施例提供的一种电子设备的结构框图。该电子设备100可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器110、存储器120、屏幕140以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器120中并被配置为由一个或多个处理器110执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
[0143] 处理器110可以包括一个或者多个处理核。处理器110利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。
[0144] 具体地,处理器110可以包括中央处理器111(Central Processing Unit,CPU)、图像处理器112(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和客户端等;GPU用于负责显示内容的渲染和绘制;
调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。
[0145] 存储器120可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储终端100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
[0146] 所述屏幕120用于显示由用户输入的信息、提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、数字、视频和其任意组合来构成,在一个实例中,触摸屏可设置于所述显示面板上从而与所述显示面板构成一个整体。
[0147] 请参考图11,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质1100中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
[0148] 计算机可读存储介质1100可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质1100包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质1100具有执行上述方法中的任何方法步骤的程序代码1111的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1111可以例如以适当形式进行压缩。
[0149] 最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。