CN117241062A - 一种视频合成方法、装置、存储介质和电子设备 - Google Patents
一种视频合成方法、装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN117241062A CN117241062A CN202311227624.2A CN202311227624A CN117241062A CN 117241062 A CN117241062 A CN 117241062A CN 202311227624 A CN202311227624 A CN 202311227624A CN 117241062 A CN117241062 A CN 117241062A
- Authority
- CN
- China
- Prior art keywords
- request
- video
- composition
- message queue
- synthesis
- 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.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 19
- 238000001308 synthesis method Methods 0.000 title abstract description 8
- 239000000203 mixture Substances 0.000 claims abstract description 103
- 239000000463 material Substances 0.000 claims abstract description 65
- 230000015572 biosynthetic process Effects 0.000 claims abstract description 59
- 238000003786 synthesis reaction Methods 0.000 claims abstract description 59
- 238000012545 processing Methods 0.000 claims abstract description 52
- 238000000034 method Methods 0.000 claims abstract description 36
- 239000002131 composite material Substances 0.000 claims abstract description 33
- 238000012544 monitoring process Methods 0.000 claims abstract description 8
- 238000004590 computer program Methods 0.000 claims description 15
- 238000007781 pre-processing Methods 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 7
- 238000002360 preparation method Methods 0.000 claims description 3
- 230000000153 supplemental effect Effects 0.000 claims description 2
- 238000004519 manufacturing process Methods 0.000 abstract description 8
- 230000006870 function Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 7
- 238000005070 sampling Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 241000023320 Luma <angiosperm> Species 0.000 description 1
- 238000012952 Resampling Methods 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003238 somatosensory effect Effects 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明实施例公开了一种视频合成方法、装置、存储介质和电子设备。通过获取合成请求并存储在消息队列中,并通过合成服务监听所述消息队列以获取目标合成请求,根据目标合成请求生成可执行指令,并通过多媒体处理框架FFmpeg根据可执行指令生成视频。由此,通过对视频合成请求参数简明化,素材组件化,降低视频合成的复杂度,从而实现视频工业化批量生产和提升用户体验感。
Description
技术领域
本发明涉及多媒体技术领域,尤其涉及一种视频合成方法、装置、存储介质和电子设备。
背景技术
视频合成是将多个素材(例如视频、图片、音频等)拼接在一起,制作出一个完整的视频作品的过程。视频合成需要视频编辑软件或平台的支持。FFmpeg(Fast Forward MPEG,极速多媒体框架)是常用的一种视频合成平台。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。但是,FFmpeg滤镜参数繁杂,专业性很高且复用率低,组装需要的音视频处理功能过程很复杂,并且难以批量生产视频,不利于工业自动化。
发明内容
有鉴于此,本发明实施例提供一种视频合成方法、装置、存储介质和电子设备,可以降低视频合成的复杂度,从而实现视频工业化批量生产和提升用户体验感。
第一方面,本发明实施例提供一种视频合成方法,所述方法包括:
获取合成请求并存储在消息队列中,所述合成请求包括至少一个对象,所述对象包括素材配置信息;
通过合成服务监听所述消息队列以获取目标合成请求;
根据所述目标合成请求生成可执行指令;以及
通过多媒体处理框架FFmpeg根据所述可执行指令生成视频。
在一些实施例中,所述合成请求为JS键值对数据JSON请求,所述JSON请求包括键值对,所述键是属性名称,所述值是属性值。
在一些实施例中,所述通过合成服务监听所述消息队列以获取目标合成请求具体为:
通过所述合成服务根据预定的第一规则从所述消息队列中提取一个合成请求确定为所述目标合成请求。
在一些实施例中,所述根据所述目标合成请求生成可执行指令包括:
对所述目标合成请求进行预处理以获取中间合成请求;以及
将所述中间合成请求转换为所述可执行指令。
在一些实施例中,所述对所述目标合成请求进行预处理以获取中间合成请求包括:
解析所述目标合成请求获取各所述对象的素材配置信息;
根据预定的第二规则对所述素材配置信息进行检测;以及
响应于所述素材配置信息不完整,在所述目标合成请求中添加补充信息以得到所述中间合成请求。
在一些实施例中,所述将所述中间合成请求转换为所述可执行指令包括:
根据所述中间合成请求的中的各个对象的相对位置关系获取各个对象的层级关系;以及
根据所述层级关系生成所述可执行指令。
在一些实施例中,所述通过多媒体处理框架FFmpeg根据所述可执行指令生成视频包括:
根据所述可执行指令通过编码器获取数据帧;
根据所述数据帧通过解码器获取比特流;以及
根据所述比特流通过复用器获取所述视频。
第二方面,本发明实施例提供了一种视频合成装置,所述装置包括:
预备单元,获取合成请求并存储在消息队列中,所述合成请求包括至少一个对象,所述对象包括素材配置信息;
服务监听单元,通过合成服务监听所述消息队列以获取目标合成请求;
请求处理单元,根据所述目标合成请求生成可执行指令;以及
命令执行单元,通过多媒体处理框架FFmpeg根据所述可执行指令生成视频。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现如第一方面所述的方法。
第四方面,本发明实施例提供了一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面所述的方法。
本发明实施例的技术方案通过获取合成请求并存储在消息队列中,并通过合成服务监听所述消息队列以获取目标合成请求,根据目标合成请求生成可执行指令,并通过多媒体处理框架FFmpeg根据可执行指令生成视频。由此,通过对视频合成请求参数简明化,素材组件化,降低视频合成的复杂度,从而实现视频工业化批量生产和提升用户体验感。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本发明实施例的视频合成系统的示意图;
图2是本发明实施例的视频合成方法的流程图;
图3是本发明实施例的合成请求存储在消息队列的流程图;
图4是本发明实施例的生成可执行指令的流程图;
图5是本发明实施例获取中间合成请求的流程图;
图6是本发明实施例将中间合成请求转换为可执行指令的流程图;
图7是本发明实施例通过可执行指令生成视频的流程图;
图8是现有技术FFmpeg对于视频进行转码的流程图;
图9是本发明实施例的视频合成装置的示意图;
图10是本发明实施例的电子设备示意图。
具体实施方式
以下基于实施例对本申请进行描述,但是本申请并不仅仅限于这些实施例。在下文对本申请的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本申请。为了避免混淆本申请的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
除非上下文明确要求,否则整个申请文件中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本申请的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
视频合成是音视频处理软件、网页和系统等音视频处理平台一种常见的功能。其中,基于多媒体处理框架FFmpeg处理视频的方式是现有技术中的一种。
多媒体处理框架FFmpeg是一套可用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,并且它还提供了丰富的接口支持开发者进行二次开发。它可以将数字音频和视频进行记录、转换和流化,因此被广泛应用于视频剪辑、字幕添加等更复杂的音视频操作。在视频合成方面,多媒体处理框架FFmpeg提供了多种功能。首先,它支持从多种来源获取输入,如文件、设备或网络流。其次,多媒体处理框架FFmpeg可以对输入进行预处理和后处理,例如裁剪、缩放、旋转等操作。此外,它还可以进行音频和视频的同步,以及添加字幕和效果。最后,多媒体处理框架FFmpeg可以将处理后的音视频输出到文件或流媒体服务器。多媒体处理框架FFmpeg的优点在于其强大的功能和灵活的接口。它支持多种音视频编解码器和容器格式,使得它可以处理大多数常见的音视频格式。此外,多媒体处理框架FFmpeg还具有良好的性能和可移植性,可以在多种操作系统和硬件平台上运行。然而,多媒体处理框架FFmpeg也有一些限制。例如,它对视频的合成操作是基于帧的,对于某些高级的编辑需求可能无法满足。并且FFmpeg滤镜参数繁杂,专业性很高且复用率低,组装需要的音视频处理功能过程很复杂,导致难以批量生产视频,不利于工业自动化。
由此,本发明实施例提供了一种视频合成方法、装置、存储介质和电子设备来降低因多媒体处理框架FFmpeg滤镜参数复杂而导致的操作专业性高,并且通过转换合成请求格式提高滤镜复用度,同时简化合成难度降低批量生产视频难度。
图1是本发明实施例的视频合成系统的示意图。在图1所示的实施例中,视频合成系统包括客户端11和服务器12。其中,客户端11用于向服务器12发送合成请求和接收服务器12发送的视频,服务器12用于接收客户端11发送的合成请求并将请求存放在消息队列中,通过合成服务获取目标合成请求,并根据所述目标合成请求生成可执行指令,通过多媒体处理框架FFmpeg根据所述可执行指令生成视频,将所述视频返回给客户端11。
图2是本发明实施例的视频合成方法的流程图。如图2所示,本发明实施例的视频合成方法包括如下步骤:
步骤S100、获取合成请求并存储在消息队列中,所述合成请求包括至少一个对象,所述对象包括素材配置信息。
在本实施例中,服务器接收客户端发送的合成请求,将所述合成请求通过消息队列进行存储。所述合成请求为JS键值对数据JSON请求,所述JSON请求包括键值对,所述键是属性名称,所述值是属性值。其中,JSON(JavaScript Object Notation,JavaScript对象标记)是一种标准的、轻量级、数据交换格式,具有易读性、易于编写和解析的特点,可以在多种编程语言之间进行数据交换。JSON格式是一种文本格式,用于描述数据的结构和内容。JSON格式由两种基本元素组成:键值对和数组。键值对是一个键和一个值之间的映射关系,用于描述属性和值。数组是一个有序列表,用于描述多个值。键值对由一个键和一个值之间的映射关系组成。键和值之间用冒号(:)分隔,每个键值对之间用逗号(,)分隔。键是一个字符串,值可以是一个字符串、数字、布尔值或数组等。
在一些实施例中,合成请求的格式如下:
{
"duration":31090,
"materials":[
{
"start_time":0,
"width":1080,
"x":0,
"end_time":4550,
"y":0,
"type":"video",
"url":"https://xxxxx.com/1681227983911784448.png",
"height":1920
},
{
"start_time":0,
"width":602,
"x":100,
"end_time":4550,
"y":200,
"type":"video",
"url":"https://xxxxx.com/itm/1647067732312723456_641600_1234.png",
"height":334
},
{
"start_time":0,
"end_time":3000,
"type":"audio",
"url":"https://xxxxx.com/1678954990921715712.wav"
}
],
"videoName":"1681602131343314944.mp4",
"fps":25,
"width":1080,
"taskId":"1681602131343314944_OPENVIDEO",
"height":1920
}
在上述合成请求的代码中,最外边的大括号“{}”内为合成请求的全部内容,其中包括"duration"、"materials"、"videoName"、"fps"、"width"、"taskId"、"height"。
"duration"表示持续时间的键,其值为31090,表示整个动画或视频的时长,单位为毫秒,即31.09秒。
"materials"是一个包含多个对象的数组,每个对象代表一个素材及其对应的素材配置信息,这些素材是用于合成视频的素材,其可以为图片、视频、音频、动画、字幕等。在上述实施例中,"materials"后的“[]”内的内容的素材配置信息,“[]”包括三个“{}”。其中,“[]”表示一个数组,“[]”内的三个“{}”表示三个对象,在这三个“{}”中包含的键值对表示对象的素材配置信息。
如上所示,第一个对象为:
{
"start_time":0,
"width":1080,
"x":0,
"end_time":4550,
"y":0,
"type":"video",
"url":"https://xxxxx.com/1681227983911784448.png",
"height":1920
}
其中,"start_time"表示该素材开始的时间,单位是毫秒,这个素材的开始时间是0毫秒。
"width"表示该素材的宽度,单位是像素,这个材料的宽度是1080像素。
"x"表示该素材在视频中的x坐标,这个素材的x坐标是0。
"end_time"表示该素材结束的时间,单位是毫秒,这个素材的结束时间是4550毫秒。
"y"表示该素材在视频中的y坐标,这个素材的y坐标是0。
"type"表示该素材的类型,这个材料的类型是video,其中,video既可以表示视频,又可以表示图片,在第一个对象中video表示图片。
"url"表示该素材的地址。
"height"表示该素材的高度,单位是像素,这个材料的高度是1920像素。
第二个对象的类型为video(图片),第三个对象的类型为audio(视频),具体配置信息与第一个对象类似,本发明实施例在此不再赘述。
"videoName"表示合成视频的名称。
"fps"表示合成视频的画面每秒传输帧数。
"width"表示视频的宽度。
"taskId"表示任务标识。
"height"标识视频的高度。
而现有技术中,FFmpeg的合成请求为:
ffmpeg-i/opt/service/api/tmp/64488750f005b57c1a5f3470_64488750f005b57c1a5f346e_back/adae4091d4e82eb3ae1d75c3ac543905.jpg
-filter_complex"nullsrc=s=1080*1920,format=rgba[b0];
[0:v]setpts=PTS+0.0/TB,scale=1080:1920[b1];
[b0][b1]overlay=0:0:enable='between(t,0.0,1.0)'[b2]"
-map[b2]-vframes 1-c:v png-t 1.0-r 25
-metadataTitle="mobvoi"-y/opt/service/api/tmp/64488750f005b57c1a5f3470_64488750f005b57c1a5f346e_back/cover.png-v info
此段代码表示调用ffmpeg命令生成一个png图片文件。
其中,使用-i参数指定输入文件,这里是一个jpg图片。
-filter_complex参数用于定义一系列过滤器操作,这些操作包括:
nullsrc=s=1080*1920,format=rgba[b0]:创建一个1080x1920的rgba格式的空白画布[b0]。
[0:v]setpts=PTS+0.0/TB,scale=1080:1920[b1]:将输入图片放在[b1]层,并设置其位置为(0,0),大小为1080x1920。
[b0][b1]overlay=0:0:enable='between(t,0.0,1.0)'[b2]:在[b0]和[b1]层之间执行覆盖操作,生成[b2]层。
-map[b2]:指定输出文件使用[b2]层的数据。
-vframes 1-c:v png:指定输出文件的视频帧数为1,编码格式为png。
-t 1.0-r 25:设置输出视频的时长为1秒,帧率为25。
-metadata Title="mobvoi":设置输出文件的元数据,这里设置了标题为'mobvoi'。
-y:如果输出文件已存在,则直接覆盖。
/opt/service/api/tmp/64488750f005b57c1a5f3470_64488750f005b57c1a5f346e_back/cover.png:指定输出文件的路径和名称。
-v info:指定输出日志的详细程度为info。
相比现有技术,本发明实施例通过将合成请求替换为JSON格式,可以使得合成请求语法更加简单,数据格式更加紧凑。并且JSON格式通过对不同素材类型封装对应的组件,组件之间不互相干扰约束,可自由控制层级关系,同时组建可共用同一个数据源,针对组建自身的需求取用其中的数据,素材服用性高。每个组件内部都是对FFmpeg的滤镜及其参数进行了二次封装,涉及到大量的滤镜组合及参数组合,包括利用多个滤镜及参数的复杂组合实现了一些特定的合成功能。同时JSON格式是基于文本的,因此它更易于解析,且不受限于特定的编程语言和框架。当用户在使用合成请求时,由于JSON格式结构简单,可自定义请求模板,并且可以根据需求组装对应的素材组件,每个组件可拆卸、可重复、可随意移动。
为了创建自动化音视频处理服务,通过消息队列的方式缓存用户的请求消息,每条消息队列可以由多个音视频合成服务监听,这样可以实现服务的动态扩展,以适应不断增长的用户需求。其中,图3是本发明实施例的将合成请求存储在消息队列的流程图。如图3所示,本发明实施例通过消息队列存储合成请求包括如下步骤:
步骤S110、消息队列通过异步处理接收所述合成请求并返回结果给客户端。
其中,消息队列可以实现异步处理,即客户端将消息发送到消息队列后,不需要等待服务器的响应,而是立即返回,继续执行其他任务。服务器可以在适当的时间从队列中获取消息并进行处理。这种异步处理可以提高系统的响应速度和吞吐量。
步骤S120、通过解耦将客户端发送合成请求和服务器获取合成请求分开处理。
其中,所述解耦表示消息队列可以将不同系统或模块之间的通信解耦,使得各个系统或模块可以独立运行,并且不需要直接依赖或了解对方的存在,从而降低了系统或模块之间的耦合度。例如,当客户端产生合成请求时,将请求发送到消息队列,服务器可以直接从消息队列中获取合成请求而不用调用客户端来获取合成请求。
步骤S130、通过削峰将客户端发送每个合成请求在所述消息队列中进行分别存储和处理。
其中,所述削峰是作用于高并发情况下,系统突然面临大量的请求,导致系统资源耗尽时,消息队列可以用于削峰填谷。即将合成请求暂时存储在消息队列中,然后按照系统处理能力逐渐消费合成请求,从而平滑处理高峰期的合成请求,避免系统崩溃或性能下降。
在一些实施例中,消息队列是在消息的传输过程中保存消息的容器。其中,消息是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中。消息队列是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
消息队列网络是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。
消息队列安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此消息队列网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。
消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。
目前主要有两种类型的消息队列:POSIX(Portable Operating SystemInterface of Unix,可移植操作系统接口)消息队列以及系统V(系统五)消息队列,系统V消息队列目前被大量使用。考虑到程序的可移植性,新开发的应用程序应尽量使用POSIX消息队列。
系统V消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。因此系统中记录消息队列的数据结构(struct ipc_ids msg_ids)位于内核中,系统中的所有消息队列都可以在结构msg_ids中找到访问入口。消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值、用户ID、组ID、消息队列中消息数目等等,甚至记录了最近对消息队列读写进程的ID。读者可以访问这些信息,也可以设置其中的某些信息。
消息队列的实现原理涉及到消息的存储、消息的传递和消息的确认机制。
消息存储,消息队列会将生产者发送的消息存储在队列中,消费者可以从队列中获取消息进行处理。消息队列支持不同的存储方式,如内存存储和硬盘存储等,以满足不同的性能需求。
消息传递,消息队列采用不同的协议和通信方式,将消息从生产者传递到消费者。通常有两种模式,即点对点模式和发布订阅模式。点对点模式下,消息只会被一个消费者接收,而发布订阅模式下,消息会被多个订阅者接收。
消息确认机制,消息队列通常支持消息的确认机制,确保消息的可靠性传递。生产者发送消息后,会等待消费者的确认响应,确保消息被成功处理。如果消息处理失败,消息队列可以进行消息重试或将消息发送到死信队列等处理。
步骤S200、通过合成服务监听所述消息队列以获取目标合成请求。
在本实施例中,通过所述合成服务根据预定的第一规则从所述消息队列中提取一个合成请求确定为所述目标合成请求。
其中,每个消息队列可以由多个合成服务监听,这样可以实现服务的动态扩展,以适应不断增长的用户需求。
第一规则用于表示从消息队列中获取合成请求的规则。
在一些实施例中,第一规则可以为时间的先后顺序。例如,服务器接收五个合成请求存储到消息队列中,时间由先到后分别为t1、t2、t3、t4和t5。合成服务按照第一规则获取时间为t1的合成请求确定为目标合成请求。
步骤S300、根据所述目标合成请求生成可执行指令。
如上所述,合成请求为JSON请求,对于FFmpeg来说,其并不能直接处理JSON格式的请求,因此,需要将JSON格式的请求转换为FFmpeg可执行的指令。
其中,图4是本发明实施例的生成可执行指令的流程图。如图4所示,根据所述目标合成请求生成可执行指令包括如下步骤:
步骤S310、对所述目标合成请求进行预处理以获取中间合成请求。
其中,图5是本发明实施例获取中间合成请求的流程图。如图5所示,对所述目标合成请求进行预处理以获取中间合成请求包括如下步骤:
步骤S311、解析所述目标合成请求获取各所述对象的素材配置信息。
步骤S312、根据预定的第二规则对所述素材配置信息进行检测。
其中,所述第二规则用于判断所述素材配置信息的完整性,并判断是否需要封装合成所需的功能字段添加到所述素材配置信息中。
例如,第二规则为素材类型与必要配置信息的对应关系,例如,对于图片类的素材,必要配置信息可以包括开始时间、结束时间、x坐标、y坐标、高度、宽度。解析所述目标合成请求获取各所述对象的素材配置信息,如果有图片类素材,则检测素材配置信息中是否包括上述必要配置信息。
步骤S313、响应于所述素材配置信息不完整,在所述目标合成请求中添加补充信息以得到所述中间合成请求。
针对以往的通过FFmpeg命令过于复杂的状况,本发明实施例通过自定义音视频合成协议,采取JSON的请求形式,把最关键、最贴合需求的功能封装为字段,同时提供字段默认值,保证合成请求能解析为正确的FFmpeg命令格式,提高音视频合成成功率。例如,假设第二规则中字幕的必要配置信息包括透明度。其中,合成所需素材中的字幕的类型是“subtitles”,并且提供了一个alpha字段用来指定字幕的透明度,它的范围是0~1。解析目标合成请求后检测到没有显示透明度这个素材配置信息,则服务器会在解析目标合成请求时默认“alpha”的值为1。或者当检测缺失透明度这个素材配置信息后,在合成请求中添加“alpha”:0.5这样的补充素材配置信息,使得呈现的字幕效果为半透明。
步骤S320、将所述中间合成请求转换为所述可执行指令。
其中,图6是本发明实施例将中间合成请求转换为可执行指令的流程图。如图6所示,将所述中间合成请求转换为所述可执行指令包括如下步骤:
步骤S321、根据所述中间合成请求的中的各个对象的相对位置关系获取各个对象的层级关系。
在JSON数组中,对象的相对位置关系可以通过索引来表示。JSON数组是一种有序的数据结构,其中的每个对象都有一个唯一的索引,且从0开始递增。
例如,
[
{
"type":"A",
"value":1
},
{
"type":"B",
"value":2
},
{
"type":"C",
"value":3
}
]
在这个JSON数组中,有三个对象,每个对象都有一个唯一的索引和类型。第一个对象的索引是0,类型为"A";第二个对象的索引是1,类型为"B";第三个对象的索引是2,类型为"C"。
假设,想将一张图片放在视频的上面,则应在索引中间合成请求的数组对象时将该图片合成请求对象放在该视频合成请求对象的后面。
步骤S322、根据所述层级关系生成所述可执行指令。
在本实施例中,根据各个对象的层级关系和素材的配置信息生成可执行指令,所述可执行指令为多媒体处理框架FFmpeg可执行的指令。例如,想为一副带alpha透明通道的png格式图片添加一个任意图片背景,则通过索引中间合成请求的数组对象将背景图片放置在png图片的后方,并根据所述背景图片放置在png图片的后方的层级关系生成所述可执行指令。
此外,针对在同一个合成任务中,多个同素材类型的场景,即每个JSON数组对象中可以同时存在多个同类型素材,且无位置要求,可任意安排相对层级。
步骤S400、通过多媒体处理框架FFmpeg根据所述可执行指令生成视频。
其中,图7是本发明实施例通过可执行指令生成视频的流程图。如图7所示,本发明实施例通过多媒体处理框架FFmpeg根据所述可执行指令生成视频包括如下步骤:
步骤S410、根据所述可执行指令通过编码器获取数据帧。
步骤S420、根据所述数据帧通过解码器获取比特流。
步骤S430、根据所述比特流通过复用器获取所述视频。
对于步骤S410-S430,FFmpeg是一个开源的音视频处理库,包含多个组件,提供音视频编解码、过滤器、格式转换、流媒体处理等功能,下面简要介绍其架构:
Libavcodec(音视频编解码核心库),支持多种音视频编解码器,如H.264、MPEG-4、AAC、MP3等。该库还提供了解码和编码的函数接口,以及编解码器的参数设置和状态查询函数。
Libavformat(音视频封装格式库),支持多种音视频封装格式,如MP4、FLV、AVI、MKV等。该库提供了读写音视频容器格式的函数接口,还支持输入、输出流的复用。
Libavfilter(音视频过滤器库),支持多种音视频过滤器,如音频/视频格式转换、图像处理、降噪、去重、裁剪、水印等。该库提供了构建音视频过滤图的函数接口。
Libswscale(用于视频像素格式转换和缩放的库),支持多种色彩空间转换和缩放算法。
Libswresample(用于音频采样格式转换和重采样的库),支持多种采样率、通道数和位深度的转换算法。
Libavutil,FFmpeg的通用工具库,提供多种工具函数,如字节序转换、时间戳计算、随机数生成等。
在FFmpeg的应用中,这些组件可以独立使用,也可以组合使用,以实现特定的音视频处理需求。例如,可以使用libavformat读取一个音视频文件,然后使用libavcodec对音视频数据进行编解码,最后使用libavfilter对音视频数据进行过滤处理,再将处理后的音视频数据写入到一个新的音视频文件中。
在一些实施例中,FFmpeg播放器基本上由五个模块组成,它们分别是源文件模块、解复用模块、解码模块、颜色空间转换摸块和渲染模块。源文件模块是这个播放器的起始,主要是为下面的各个模块以数据包的方式提供数据流。具体而言就是从本地视频文件中读取出数据包,然后将其按照一定的顺序排列,源源不断得发送到下面的解复用模块中。
解复用模块根据源文件的容器格式来分离出视频流、音频流和字幕流,在加入时间同步等信息后传送给下面的解码模块。为识别出不同的文件类型和媒体类型,常规的做法是读取一部分数据,然后遍历解复用播放器支持的文件格式和媒体数据格式,做匹配来确定是哪种文件类型,哪种媒体类型,有些媒体类型的原始数据外面还有其他的信息,比如时间,包大小,是否完整等等。这里要注意的是,时钟信息的计算工作也是在这个模块完成,用于各媒体之间的同步。
解码模块作用就是解码数据包,并且把同步时钟信息传递下去。对视频媒体而言,通常是解码成YUV(是一种描述彩色视频的编码方式,其中Y代表亮度(Luma),U和V代表色度(Chroma))数据,然后利用显卡硬件直接支持YUV格式数据Overlay(覆盖)快速显示的特性让显卡极速显示。YUV格式是一个统称,YUV格式有两大类planar(平面的)和packed(打包的)。对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。有些非常古老的显卡和嵌入式系统不支持YUV数据显示,那就要转换成RGB(Red Green Blue,一种颜色标准)格式的数据,每一帧的每一个像素点都要转换,分别计算RGB分量,并且因为转换是浮点运算,虽然有定点算法,还是要耗掉相当一部分CPU(Central Processing Unit/Processor,中央处理器),总体上效率底下;对音频媒体而言,通常是解码成PCM(PulseCode Modulation,脉冲编码调制)数据,然后送给声卡直接输出。
颜色空间转换模块的作用是把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式。通常视频解码器解码出来的是YUV数据,PC(personalcomputer,个人计算机)系统是直接支持YUV格式的,也支持RGB格式,有些嵌入式系统只支持RGB格式的。
渲染模块对视频来说就是显示视频图像,对音频来说就是播放声音,对字幕来说就是显示字幕,并保持视频、音频和字幕的同步播放
转码器在视音频编解码处理的程序中,属于一个比较复杂的东西。因为它结合了视频的解码和编码。一个视频播放器,一般只包含解码功能;一个视频编码工具,一般只包含编码功能;而一个视频转码器,则需要先对视频进行解码,然后再对视频进行编码,因而相当于解码器和编码器的结合。
例如,图8是现有技术FFmpeg对于视频进行转码的流程图。如图8所示,视频转码包括如下步骤:
步骤S810、输入素材视频文件。
步骤S820、对素材视频文件进行解封装,分为第一视频码流和第一音频码流。
步骤S820、对第一视频码流和第一音频码流分别进行解码,得到像素数据和采样数据。
步骤S840、分别对像素数据和采样数据进行编码得到第二视频码流和第二音频码流。
步骤S850、对第二视频码流和第二音频码流进行封装得到输出合成文件。
例如,输入视频的封装格式是FLV(FLASH VIDEO,流媒体格式),视频编码标准是H.264,音频编码标准是AA;输出视频的封装格式是AVI(Audio Video Interleaved,音频视频交错格式),视频编码标准是MPEG2(Moving Picture Experts Group,活动图像专家组),音频编码标准是MP3(Moving Picture Experts Group Audio Layer-3,一种能播放音乐文件的播放器)。从流程中可以看出,首先从输入视频中分离出视频码流和音频压缩码流,然后分别将视频码流和音频码流进行解码,获取到非压缩的像素数据和音频采样数据,接着将非压缩的像素数据和音频采样数据重新进行编码,获得重新编码后的视频码流和音频码流,最后将视频码流和音频码流重新封装成一个文件。
现有技术利用FFmpeg处理合成请求复杂度高,针对不同的合成请求,每次都要组装大量组件,组装需要的音视频处理功能过程太过复杂,且针对不同的合成请求,每次都要组装大量滤镜输入输出管线,复用度低。而本发明实施例采用JSON形式的合成请求,提前封装了功能字段,减轻了工作量且降低了合成难度。同时,本发明实施例为了简化素材预处理流程,提高素材的复用性,还提供了单独采用视频文件中的视频流或者音频流用来合成的功能,可以将同一个mp4视频用作视频类型的数据源,同时用作音频类型的数据源进行合成,而无需分别提取集中的视频、音频分别存成文件再传入对应的类型JSON数组对象中,大大简化了流程。为了进一步增强音视频合成的易用性,本发明实施例提供了不同合成需求场景下的模版请求,用户若想使用其中某个模版,只需将模版中对应类型的数据源换为自己需要的即可,对用户操作极为友好。
本发明实施例通过获取合成请求并存储在消息队列中,并通过合成服务监听所述消息队列以获取目标合成请求,根据目标合成请求生成可执行指令,并通过多媒体处理框架FFmpeg根据可执行指令生成视频。由此,通过对视频合成请求参数简明化,素材组件化,降低视频合成的复杂度,从而实现视频工业化批量生产和提升用户体验感。
图9是本发明实施例的视频合成装置的示意图。如图9所示,本发明实施例的视频合成装置包括预备单元91,用于获取合成请求并储存在消息队列中;服务监听单元92,用于获取目标合成请求;处理请求单元93,用于封装所述目标合成请求并进行解析获取可执行命令;以及命令执行单元94,用于根据所述可执行命令获取视频。
在一些实施例中,请求预处理单元包括:
合成请求获取子单元,用于获取合成请求,所述合成请求为JS键值对数据JSON请求,所述JSON请求包括键值对,所述键是属性名称,所述值是属性值。
合成请求存储子单元,用于将所述合成请求通过消息队列进行存储。
在一些实施例中,服务监听单元包括具体用于:
通过所述合成服务根据预定的第一规则从所述消息队列中提取一个合成请求确定为所述目标合成请求。
在一些实施例中,处理请求单元包括:
目标合成请求处理子单元,用于对所述目标合成请求进行预处理以获取中间合成请求;以及
生成可执行指令子单元,用于根据所述层级关系生成所述可执行指令。
在一些实施例中,所述目标合成请求处理子单元包括:
解析目标合成模块,用于解析所述目标合成请求获取各所述对象的素材配置信息;
检测模块,用于根据预定的第二规则对所述素材配置信息进行检测;以及
中间合成请求获取模块,用于响应于所述素材配置信息不完整,在所述目标合成请求中添加补充信息以得到所述中间合成请求。
在一些实施例中,所述生成可执行指令子单元包括:
层级关系获取模块,用于根据所述中间合成请求的中的各个对象的相对位置关系获取各个对象的层级关系;以及
可执行命令获取模块,用于根据所述层级关系生成所述可执行指令。
在一些实施例中,命令执行单元包括:
数据帧获取模块,用于根据所述可执行指令通过编码器获取数据帧;
比特流获取模块,用于根据所述数据帧通过解码器获取比特流;以及
视频生成模块,用于根据所述比特流通过复用器获取视频。
本发明实施例通过获取合成请求并存储在消息队列中,并通过合成服务监听所述消息队列以获取目标合成请求,根据目标合成请求生成可执行指令,并通过多媒体处理框架FFmpeg根据可执行指令生成视频。由此,通过对视频合成请求参数简明化,素材组件化,降低视频合成的复杂度,从而实现视频工业化批量生产和提升用户体验感。
图10是本发明实施例的电子设备的示意图。如图10所示,图10所示的电子设备为通用地址查询装置,其包括通用的计算机硬件结构,其至少包括处理器101和存储器102。处理器101和存储器102通过总线103连接。存储器102适于存储处理器101可执行的指令或程序。处理器101可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器101通过执行存储器102所存储的指令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其它装置的控制。总线103将上述多个组件连接在一起,同时将上述组件连接到显示控制器104和显示装置以及输入/输出(I/O)装置105。输入/输出(I/O)装置105可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出装置105通过输入/输出(I/O)控制器106与系统相连。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图来描述的。应理解可由计算机程序指令实现流程图中的每一流程。
这些计算机程序指令可以存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现流程图一个流程或多个流程中指定的功能。
也可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程中指定的功能的装置。
本发明的另一实施例涉及一种非易失性存储介质,用于存储计算机可读程序,所述计算机可读程序用于供计算机执行上述部分或全部的方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指定相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的优选实施例,并不用于限制本申请,对于本领域技术人员而言,本申请可以有各种改动和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种视频合成方法,其特征在于,所述方法包括:
获取合成请求并存储在消息队列中,所述合成请求包括至少一个对象,所述对象包括素材配置信息;
通过合成服务监听所述消息队列以获取目标合成请求;
根据所述目标合成请求生成可执行指令;以及
通过多媒体处理框架FFmpeg根据所述可执行指令生成视频。
2.根据权利要求1所述的方法,其特征在于,所述合成请求为JS键值对数据JSON请求,所述JSON请求包括键值对,所述键是属性名称,所述值是属性值。
3.根据权利要求1所述的方法,其特征在于,所述通过合成服务监听所述消息队列以获取目标合成请求具体为:
通过所述合成服务根据预定的第一规则从所述消息队列中提取一个合成请求确定为所述目标合成请求。
4.根据权利要求1所述的方法,其特征在于,所述根据所述目标合成请求生成可执行指令包括:
对所述目标合成请求进行预处理以获取中间合成请求;以及
将所述中间合成请求转换为所述可执行指令。
5.根据权利要求4所述的方法,其特征在于,所述对所述目标合成请求进行预处理以获取中间合成请求包括:
解析所述目标合成请求获取各所述对象的素材配置信息;
根据预定的第二规则对所述素材配置信息进行检测;以及
响应于所述素材配置信息不完整,在所述目标合成请求中添加补充信息以得到所述中间合成请求。
6.根据权利要求4所述的方法,其特征在于,所述将所述中间合成请求转换为所述可执行指令包括:
根据所述中间合成请求的中的各个对象的相对位置关系获取各个对象的层级关系;以及
根据所述层级关系生成所述可执行指令。
7.根据权利要求1所述的方法,其特征在于,所述通过多媒体处理框架FFmpeg根据所述可执行指令生成视频包括:
根据所述可执行指令通过编码器获取数据帧;
根据所述数据帧通过解码器获取比特流;以及
根据所述比特流通过复用器获取所述视频。
8.一种视频合成装置,其特征在于,所述装置包括:
预备单元,获取合成请求并存储在消息队列中,所述合成请求包括至少一个对象,所述对象包括素材配置信息;
服务监听单元,通过合成服务监听所述消息队列以获取目标合成请求;
请求处理单元,根据所述目标合成请求生成可执行指令;以及
命令执行单元,通过多媒体处理框架FFmpeg根据所述可执行指令生成视频。
9.一种计算机可读存储介质,其上存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如权利要求1-7中任一项所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311227624.2A CN117241062A (zh) | 2023-09-21 | 2023-09-21 | 一种视频合成方法、装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311227624.2A CN117241062A (zh) | 2023-09-21 | 2023-09-21 | 一种视频合成方法、装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117241062A true CN117241062A (zh) | 2023-12-15 |
Family
ID=89096378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311227624.2A Pending CN117241062A (zh) | 2023-09-21 | 2023-09-21 | 一种视频合成方法、装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117241062A (zh) |
-
2023
- 2023-09-21 CN CN202311227624.2A patent/CN117241062A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6924266B2 (ja) | 生成されたコンテンツを含むビデオデータを符号化するための方法および装置 | |
US7730047B2 (en) | Analysis of media content via extensible object | |
CN101689170B (zh) | 用于数字媒体处理的接口 | |
CN105049920B (zh) | 一种多媒体文件的录制方法和装置 | |
TWI674797B (zh) | 球面區域呈現之方法與裝置 | |
JP2008136204A (ja) | FlexMuxストリームをストリーム形成、受信及び処理する装置及び方法 | |
JP2004287595A (ja) | 複合メディアコンテンツの変換装置及び変換方法並びに複合メディアコンテンツ変換プログラム | |
GB2563865A (en) | Method, device, and computer program for transmitting media content | |
US20090007208A1 (en) | Program, data processing method, and system of same | |
CN105049904B (zh) | 一种多媒体文件的播放方法和装置 | |
CN116210221A (zh) | Mpeg和gltf媒体的时间对齐 | |
WO2023207119A1 (zh) | 沉浸媒体的处理方法、装置、设备及存储介质 | |
US20100095228A1 (en) | Apparatus and method for providing user interface based on structured rich media data | |
US20070239780A1 (en) | Simultaneous capture and analysis of media content | |
JP2003153254A (ja) | データ処理装置及びデータ処理方法、並びにプログラム、記憶媒体 | |
JP4548226B2 (ja) | データ処理方法、その装置およびプログラム | |
WO2021065605A1 (ja) | 情報処理装置および情報処理方法 | |
KR20140117889A (ko) | 클라이언트 장치, 서버 장치, 멀티미디어 리디렉션 시스템 및 그 방법 | |
KR101295377B1 (ko) | 파일 포맷을 구성하는 방법과 상기 파일 포맷을 가지는파일을 포함한 방송 신호를 처리하는 장치 및 방법 | |
CN117241062A (zh) | 一种视频合成方法、装置、存储介质和电子设备 | |
US7664373B2 (en) | Program, data processing method, and system of same | |
Black et al. | A compendium of robust data structures | |
KR20100029010A (ko) | 멀티미디어 데이터를 처리하기 위한 다중 프로세서 시스템들 및 그것의 방법들 | |
JP2003143575A (ja) | マルチメディア再生方法及び装置 | |
US11706374B2 (en) | Methods and apparatus for re-timing and scaling input video tracks |
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 |