前语

如何用Serverless实现视频剪辑批量化、自动化与定制化

开端讲之前先处理我们看到这个标题时心里的3个疑惑:

  1. 视频编排不是用Adobe的软件就能够做了吗?
  2. 为什么要用Serverless
  3. 如何写代码做视频编排?

首先说说哪些视频编排场景是Adobe等软件无法完结的

我们往常接触到的视频编排一般都是运用Premiere,AE等这类专业东西来完结视频编排。他们能完结一些杂乱的作用,比方做宣扬视频,广告视频等。

但有些企业在某些事务场景下是希望能批量且主动化的完结视频编排。

比方以下几种场景:

  1. 假设校园希望能在学生上完网课之后立刻呈现一切学生学习过程中的精彩视频,配上校园的logo和宣扬语等,让学生一键共享自己的作用。假设有1万个学生,需求为每个学生制造绝无仅有的视频,所以需求批量且主动化的完结1万个不同的视频编排。
  2. 某次营销活动中,需求为不同的用户生成不同的头像视频来招引用户参加。每个用户的头像都是绝无仅有的,生成的视频也是绝无仅有的,用户或许成千上万,因而主动化完结是有必要的条件。
  3. 网红运营公司希望能给一切主播生成一致的营业视频。或许有100个主播,专门找一个人编排100个视频好像牵强能接受,但假如每周都要剪一次不同的视频呢?所以主动化,批量和可定制化的编排就成了主要需求。

以上的场景中有三个特色:

  1. 批量
  2. 主动化
  3. 可定制

关于契合以上特色的场景,是传统的视频编排东西或许模版化的视频处理软件无法轻松完结的。

再来说说为什么用Serverless

由于视频编排这样的事务有几个特色:

  • 运用时段会集。
  • 核算量大。

独自购买高规格的服务器使用率很低,买便宜的服务器核算才能又跟不上。

因而Serverless按量计费的特色,以及高功能的核算才能,完美匹配了这样的需求场景。

既能到达100%的使用率,又能按量运用它的高功能核算才能。

一起,Serverless具有多变的可编程环境,能够运用了解的编程言语,灵活性很高。

最终说说如何写代码做视频编排

本文章说到的一切视频编排的功用,都是用FFmpeg这个东西,所以先给我们讲讲什么是FFmpeg。

FFmpeg是一个用来做视频处理的开源东西,它有十分强壮的功用,它支撑视频编排、视频转码、视频修正、音频处理、增加文字、视频拼接、拉流推流直播等功用。

咱们经过不同的FFmpeg指令就能够编程完结不同的视频编排功用,组合编排起来,就能够应对各种批量主动化的场景了。

视频编排批量化、主动化与定制化实践

常见的视频编排场景主要包括以下几种:

  1. 视频转码
  2. 视频裁剪
  3. 视频加文字
  4. 视频加图片
  5. 视频拼接
  6. 视频加音频
  7. 视频转场
  8. 视频特效
  9. 视频加速慢速播映

接下来给我们展现一些详细的FFmpeg指令例子,假如你在本地安装了FFmpeg,也能够在本地执行这些指令。关于怎么安装FFmpeg,能够去看官网的教程。

// 将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也支撑独自对音频进行修正。

如何运转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布置

上面说到的常见的视频编排场景我现已完结并开源了,下载代码直接布置到serverless就能够运用了。

github.com/woodyyan/ff…

github.com/woodyyan/ff…

这儿分为了两个函数,一个负责处理单个视频,一个负责把多个视频拼接成一个视频并配上背景音乐。

现在支撑以下功用:

  1. 在视频中增加文字
  2. 视频分辨率转化
  3. 在视频中增加图片
  4. 视频拼接
  5. 增加背景音乐

源码里展现的仅仅常见的一些视频编排场景,我们能够依据自己的事务需求,编写自己的视频编排逻辑。

Serverless布置

方法一:Github Action主动布置

  1. Fork仓库。
  2. 在仓库的Settings-Secrets-Actions中增加TENCENT_SECRET_IDTENCENT_SECRET_KEY两个密钥。ID和KEY能够在腾讯云的访问操控里边获取。
  3. 增加之后,在Action中就能够发起布置了。每次修正代码推送后,也会主动触发Action布置。
  4. 假如需求有一些自定义的装备,请修正serverless.yml。
  5. 云函数最终会主动布置到TENCENT_SECRET_ID地点的账号下。

方法二:云函数操控台手动布置

  1. 下载代码。

  2. 在根目录把一切文件和文件夹一起打包成一个ZIP文件。

  3. 去云函数操控台,新建一个函数。

  4. 挑选从头开端:

    1. 挑选python言语。
    2. 上传ZIP文件。
    3. 函数内存主张挑选较大的内存。
    4. 敞开异步执行。
    5. 执行超时时刻依据视频大小主张设置长一点,比方30秒以上。
    6. 装备触发器,挑选API网关触发器,封闭集成呼应。
  5. 完结布置后,就能够经过API网关的URL开端调用了。

实在事例回忆

如何用Serverless实现视频剪辑批量化、自动化与定制化

一个做网课的校园,需求每次在学生上完网课之后把上网课的录像制造成一段30秒的视频,作为学生的学习作用。

此事例有几个关键的信息点:

  1. 一般一堂课有200个学生,需求一起制造200个视频。
  2. 需求把1小时的上课视频编排成30秒。
  3. 由于每个学生的上课屏幕有所不同,因而录制的视频都是不同的。
  4. 最终的作用视频还需求加上学生的名字和头像。
  5. 学生结束上课的时刻很会集,因而制造视频时会有短时高并发。
  6. 每次上完课的时候才会需求制造视频,时段比较固定且会集。

归纳上述特色,用Serverless来做这样的视频编排带来了多个优点:

  1. 处理了200个并发的问题,不需求自己建立过多的服务器。
  2. 处理了只在发生时段运用的问题,其他时段都没有本钱发生。
  3. 处理了需求较强核算才能快速制造视频的问题。

下面是这个事例的参考架构图。

如何用Serverless实现视频剪辑批量化、自动化与定制化

总结

经过编排、组合、复用上面列举的各种音视频编排的场景,就能制造出各种各样想要的作用。

然后把视频编排中用来操控各种作用的参数,变成调用服务时传入的参数,就能完结各种作用的定制化了。

最终再总结一下经过这种写代码的方法完结视频编排的运用场景:

  1. 处理经过修正单个参数来批量制造视频的场景。
  2. 处理经过用户触发来主动化制造视频的场景。
  3. 处理不同场景需求不同定制化的制造视频的场景。

一起,使用serverless来完结视频编排,相同也处理了以下几个问题:

  1. 由于一般视频编排不是全天运转,使用serverless按量付费的特功能优化本钱。
  2. 由于视频编排一般是重核算场景,使用serverless可选的高规格装备来应对这种重核算。
  3. 在批量制造视频的场景中一般会存在高并发,使用serverless主动弹性弹性的特功能轻松应对高并发。

关于Serverless运用上或许视频编排我们有什么问题,欢迎给我留言。