开始讲之前先解决大家看到这个标题时心里的3个疑惑:
大家平常接触到的视频剪辑通常都是使用 Premiere,AE 等这类专业工具来完成视频剪辑。他们能完成一些复杂的效果,比如做宣传视频,广告视频等。
但有些企业在某些业务场景下是期望能批量且自动化的完成视频剪辑。
比如以下几种场景:
以上的场景中有三个特点:
对于符合以上特点的场景,是传统的视频剪辑工具或者模版化的视频处理软件无法轻松完成的。
因为视频剪辑这样的业务有几个特点:
单独购买高规格的服务器利用率很低,买便宜的服务器计算能力又跟不上。
因此 Serverless 按量计费的特点,以及高性能的计算能力,完美匹配了这样的需求场景。
既能达到 100% 的利用率,又能按量使用它的高性能计算能力。
同时,腾讯云 Serverless 云函数拥有多变的可编程环境,可以使用任意熟悉的编程语言,灵活性很高。
本文章提到的所有视频剪辑的功能,都是用 FFmpeg 这个工具,先给大家讲讲什么是 FFmpeg。
FFmpeg(http://ffmpeg.org/)是一个用来做视频处理的开源工具,它有非常强大的功能,它支持视频剪辑、视频转码、视频编辑、音频处理、添加文字、视频拼接、拉流推流直播等功能。
我们通过不同的 FFmpeg 命令就可以编程完成不同的视频剪辑功能,组合编排起来,就可以应对各种批量自动化的场景了。
常见的视频剪辑场景主要包含以下几种:
接下来给大家展示一些具体的 FFmpeg 命令例子,如果你在本地安装了 FFmpeg,也可以在本地执行这些命令。关于怎么安装 FFmpeg,可以去看官网的教程(http://ffmpeg.org/)。
// 将MOV视频转成mp4视频
ffmpeg -i input.mov output.mp4
// 将原视频的帧率修改为24
ffmpeg -i input.mp4 -r 24 -an output.mp4
// 将mp4视频转为可用于直播的视频流
ffmpeg -i input.mp4 -codec: copy -bsf:v h264_mp4toannexb -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
// 将视频分别变为480x360,并把码率改400
ffmpeg -i input.mp4 -vf scale=480:360,pad=480:360:240:240:black -c:v libx264 -x264-params nal-hrd=cbr:force-cfr=1 -b:v 400000 -bufsize 400000 -minrate 400000 -maxrate 400000 output.mp4
// 给视频添加文字,比如字幕、标题等。
// `fontfile`是要使用的字体的路径,`text`是你要添加的文字,
// `fontcolor`是文字的颜色,`fontsize`是文字大小,`box`是给文字添加底框。
// `box=1`表示enable,`0`表示disable,`boxcolor`是底框的颜色,black@0.5表示黑色透明度是50%,`boxborderw`是底框距文字的宽度
// `x`和`y`是文字的位置,`x`和`y`不只支持数字,还支持各种表达式,具体可以去官网查看
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='你的文字':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy output.mp4
// 给视频添加图片,比如添加logo、头像、表情等。filter_complex表示复合的滤镜,overlay表示表示图片的x和y,enable表示图片出现的时间段,从0-20秒
ffmpeg -i input.mp4 -i avatar.JPG -filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy output.mp4
// 视频拼接,list.txt里面按顺序放所有要拼接的视频的文件路径,如下。
// 注意,如果视频的分辨率不一致会导致拼接失败。
ffmpeg -f concat -safe 0 -i list.txt -c copy -movflags +faststart output.mp4
// list.txt的格式如下
file 'xx.mp4'
file 'yy.mp4'
// 视频加音频,stream_loop表示是否循环音频内容,-1表示无限循环,0表示不循环。shortest表示最短的MP3输入流结束时完成编码。
ffmpeg -y -i input.mp4 -stream_loop -1 -i audio.mp3 -map 0:v -map 1:a -c:v copy -shortest output.mp4
FFmpeg 能做的事情非常多,这里就不一一讲解了。更多的玩法可以在 FFmpeg官网上探索。
对于音频的编辑也是同样的道理,FFmpeg也支持单独对音频进行编辑。
因为 Python 运行这些命令比较便捷,所以我们可以使用 python 来运行所有的 FFmpeg 命令。
同时, python 在 腾讯云 Serverless 云函数上运行性能也比较好,部署也方便。
通过 Python 来使用 FFmpeg 的视频剪辑代码在文章最后有开源链接,并且,在官网上也有模版可以直接使用,几乎覆盖了常见的音视频剪辑等操作。
这里就展示一个简单的调用代码示例。
child = subprocess.run('./ffmpeg -i input.mov output.mp4',
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, close_fds=True, shell=True)
if child.returncode == 0:
print("success:", child)
else:
print("error:", child)
raise KeyError("处理视频失败, 错误: ", child)
上面提到的常见的视频剪辑场景我已经实现并开源了,下载代码直接部署到Serverless 就可以使用了,下载地址:
https://github.com/woodyyan/ffmpeg-composition
https://github.com/woodyyan/ffmpeg-splice
这里分为了两个函数,一个负责处理单个视频,一个负责把多个视频拼接成一个视频并配上背景音乐。
目前支持以下功能:
源码里展示的只是常见的一些视频剪辑场景,大家可以根据自己的业务需要,编写自己的视频剪辑逻辑。
方式一:Github Action自动部署
TENCENT_SECRET_ID
和TENCENT_SECRET_KEY
两个密钥。ID 和 KEY 可以在腾讯云的访问控制里面获取。TENCENT_SECRET_ID
所在的账号下。方式二:云函数控制台手动部署
一个做网课的学校,需要每次在学生上完网课之后把上网课的录像制作成一段30 秒的视频,作为学生的学习成果。
此案例有几个关键的信息点:
综合上述特点,用 腾讯云 Serverless 云函数 来做这样的视频剪辑带来了多个好处:
下面是这个案例的参考架构图:
通过编排、组合、复用上面列举的各种音视频剪辑的场景,就能制作出各种各样想要的效果。
然后把视频剪辑中用来控制各种效果的参数,变成调用服务时传入的参数,就能实现各种效果的定制化了。
最后再总结一下通过这种写代码的方式完成视频剪辑的使用场景:
同时,利用 腾讯云 Serverless 云函数来完成视频剪辑,同样也解决了以下几个问题:
最新活动
提交 Serverless 技术方案咨询,我们将在1-3个工作日联系您!
点击「阅读原文 」,进入新春采购会场
对文章内容有任何疑问和不清楚的地方,欢迎文章下方留言交流。
本文分享自 ServerlessCloudNative 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!