如何用Serverless实现视频片段的批量化、自动化、定制化为什么要用Serverless?如何编写代码制作视频剪辑?首先说说Adobe等软件无法完成的视频剪辑场景。我们平时接触到的视频剪辑,通常都是使用Premiere、AE等专业工具来完成视频剪辑。他们可以完成一些复杂的效果,比如制作宣传视频、广告视频等。但是,一些公司希望能够在某些业务场景中实现视频剪辑的批量化和自动化。例如以下场景:假设学校希望在学生完成网课后立即呈现学生学习过程的所有精彩视频,并带有学校的标志和标语等,让学生分享自己的心声。一键成就。假设有10000名学生,需要为每个学生制作一个独一无二的视频,那么需要批量自动完成10000个不同的视频片段。在营销活动中,需要为不同的用户生成不同的头像视频,以吸引用户参与。每个用户的头像都是独一无二的,生成的视频也是独一无二的。可能有成千上万的用户,所以自动化是必须的。网红运营公司希望为所有主播生成统一的业务视频。可能有100个主播,找一个人剪辑100个视频似乎勉强可以接受,但如果每周要剪辑不同的视频怎么办?因此,自动化、批量和可自定义的编辑成为主要需求。上述场景具有三个特点:批量自动化可定制对于满足上述特点的场景,传统的视频编辑工具或模板化的视频处理软件无法轻松完成。先说说为什么用Serverless,因为像视频剪辑这样的业务有几个特点:使用时间集中。计算量很大。单独购买的高规格服务器使用率很低,廉价服务器的计算能力跟不上。因此,serverless按量计费的特点和高性能的计算能力,完美匹配了这样的需求场景。不仅可以达到100%的利用率,还可以按量使用其高性能计算能力。同时Serverless具有多变的可编程环境,可以使用熟悉的编程语言,具有很高的灵活性。最后说说如何编写视频剪辑的代码。本文提到的所有视频编辑功能都使用了FFmpeg这个工具,下面我就给大家说说什么是FFmpeg吧。FFmpeg是一种用于视频处理的开源工具。它具有非常强大的功能。支持视频编辑、视频转码、视频编辑、音频处理、添加文字、视频拼接、推流、推流等功能。我们可以通过不同的FFmpeg命令来编写不同的视频编辑功能,组合排列,可以应对各种批量自动化场景。视频编辑的批量、自动化和自定义。常见的视频剪辑场景主要有以下几种:视频转码、视频裁剪、视频加法、文字视频、图片视频拼接、视频加法、音视频转场、视频特效、视频加速慢放。让我们展示一些FFmpeg命令的具体示例。如果你本地安装了FFmpeg,你也可以在本地执行这些命令。关于如何安装FFmpeg,可以去官网看教程。//将MOV视频转为mp4视频ffmpeg-iinput.movoutput.mp4//将原视频的帧率改为24ffmpeg-iinput.mp4-r24-anoutput.mp4//将mp4视频转为可用的Livevideostreamffmpeg-iinput.mp4-codec:copy-bsf:vh264_mp4toannexb-start_number0-hls_time10-hls_list_size0-fhlsoutput.m3u8//将video改为480x360,codecRate改为400ffmpeg-iinput.mp4-vfscale=480:360,pad=480:360:240:240:black-c:vlibx264-x264-paramsnal-hrd=cbr:force-cfr=1-b:v400000-bufsize400000-minrate400000-maxrate400000output.mp4//给视频添加文字,比如字幕,标题等//`fontfile`是要使用的字体的路径,`text`是你要添加的文字,//`fontcolor`是文字的颜色,`fontsize`是文字的大小,`box`是给文字加底框。//`box=1`表示启用,`0`表示禁用,`boxcolor`为底框颜色,black@0.5表示黑色透明度为50%,`boxborderw`为底框距text//`x`和`y`是文本的位置。`x`和`y`不仅支持数字,还支持各种表达式。具体可以去官网查看ffmpeg-iinput.mp4-vf"drawtext=fontfile=/path/to/font.ttf:text='yourtext':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2"-codec:acopyoutput.mp4//在视频中添加图片,如如添加logo、头像、表情等,filter_complex代表复合滤镜,overlay代表图片的x和y,enable代表图片出现的时间段,从0-20秒ffmpeg-iinput.mp4-iavatar.JPG-filter_complex"[0:v][1:v]overlay=25:25:enable='between(t,0,20)'"-pix_fmtyuv420p-c:acopyoutput.mp4//视频拼接,将所有需要拼接的视频依次放入list.txt文件中,文件路径如下。//注意,如果视频分辨率不一致,拼接会失败。ffmpeg-fconcat-safe0-ilist.txt-ccopy-movflags+faststartoutput.mp4//list.txt格式如下file'xx.mp4'file'yy.mp4'//Videoplusaudio,stream_loop表示是否循环播放音频内容,-1表示无限循环,0表示不循环。最短表示编码是在最短的MP3输入流的末尾完成的。ffmpeg-y-iinput.mp4-stream_loop-1-iaudio.mp3-map0:v-map1:a-c:vcopy-shortestoutput.mp4FFmpeg可以做很多事情,我就不说了在这里一一解释。更多玩法可以到FFmpeg官网探索。音频编辑也是一样,FFmpeg也支持单独进行音频编辑。如何运行FFmpeg命令因为Python运行这些命令比较方便,所以我们可以使用python来运行所有的FFmpeg命令。同时,python在serverlesscloudfunctions上运行效果更好,部署简单。文末有开源链接通过Python使用FFmpeg的视频编辑代码。并且官网上也有模板可以直接使用,涵盖了音视频剪辑等常用操作。这是一个简单的调用代码示例。child=subprocess.run('./ffmpeg-iinput.movoutput.mp4',stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True,shell=True)ifchild.returncode==0:print("success:",child)else:print("error:",child)raiseKeyError("Failedtoprocessvideo,error:",child)我在serverless部署中实现并开源了上面提到的常见视频编辑场景,下载代码直接部署到serverless即可使用。https://github.com/woodyyan/ffmpeg-compositionhttps://github.com/woodyyan/ffmpeg-splice这里分为两个函数,一个负责处理单个视频,一个负责拼接多个视频成一个视频并匹配背景音乐。目前支持以下功能:视频添加文字视频分辨率转换视频添加图片视频拼接添加背景音乐源码只展示了一些常见的视频编辑场景,您可以根据业务需要编写自己的视频编辑逻辑。Serverless部署方式一:GithubAction自动部署fork仓库。在仓库的Settings-Secrets-Actions中添加两个key,TENCENT_SECRET_ID和TENCENT_SECRET_KEY。ID和KEY可以在腾讯云的访问控制中获取。添加后,可以在Action中发起部署。每次代码修改推送后也会自动触发动作部署。如果需要有一些自定义配置,请修改serverless.yml。云函数最终会自动部署到TENCENT_SECRET_ID所在的账号。方法二:在云函数控制台手动部署下载代码。将所有文件和文件夹打包到根目录中的ZIP文件中。转到云功能控制台并创建一个新功能。选择从头开始:选择python语言。上传ZIP文件。对于函数内存,建议选择大一点的内存。启用异步执行。执行超时时间建议根据视频大小设置的长一些,比如30秒以上。配置触发器,选择API网关触发器,关闭集成响应。部署完成后,就可以通过API网关的URL开始调用了。真实案例回顾某学校开展网课,需要在学生每次网课结束后制作一段30秒的网课视频,作为学生的学习成果。本案例有几个关键信息点:通常一个班有200个学生,需要同时制作200个视频。您需要将1小时的课程视频剪辑成30秒。由于每个学生的课堂画面不同,录制的视频也会有所不同。最终的产品视频还需要加上学生的名字和头像。学生下课的时间很集中,所以做视频的时候会有短时间的高并发。每次下课只需要做一个视频,时间段比较固定和集中。基于以上特点,使用Serverless做这样的视频剪辑有多重好处:解决了200并发的问题,不需要自己搭建太多的服务器。解决了只在发生期间使用,其他期间不产生费用的问题。解决需要强大算力才能快速制作视频的问题。下面是这个案例的参考架构图。总结通过对上述各种音频和视频片段的场景进行排列、组合和重复使用,可以产生各种想要的效果。然后将视频片段中控制各种效果的参数,变成调用服务时传入的参数,可以自定义各种效果。最后通过这种写代码的方式总结一下视频剪辑的使用场景:通过修改个别参数解决批量制作视频的场景。解决了通过用户触发器自动制作视频的场景。解决不同的场景需要不同的定制化视频制作场景。同时,使用Serverless完成视频剪辑也解决了以下问题:由于视频剪辑通常不会整天运行,使用Serverless的按需付费特性可以优化成本。由于视频剪辑通常是重计算场景,因此采用Serverless可选的高规格配置来应对此类重计算。在批量视频制作的场景中,通常会出现高并发的情况,而serverless的自动弹性伸缩特性可以轻松应对高并发。如果您对Serverless的使用或视频编辑有任何疑问,请给我留言。
