前言

开始讲之前先解决大家看到这个标题时心里的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就可以使用了。

https://github.com/woodyyan/ffmpeg-composition

https://github.com/woodyyan/ffmpeg-splice

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

目前支持以下功能:

  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开始调用了。

真实案例回顾

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

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

  1. 通常一堂课有200个学生,需要同时制作200个视频。
  2. 需要把1小时的上课视频剪辑成30秒。
  3. 由于每个学生的上课屏幕有所不同,因此录制的视频都是不同的。
  4. 最终的成果视频还需要加上学生的名字和头像。
  5. 学生结束上课的时间很集中,因此制作视频时会有短时高并发。
  6. 每次上完课的时候才会需要制作视频,时段比较固定且集中。

综合上述特点,用Serverless来做这样的视频剪辑带来了多个好处:

  1. 解决了200个并发的问题,不需要自己搭建过多的服务器。
  2. 解决了只在发生时段使用的问题,其他时段都没有成本产生。
  3. 解决了需要较强计算能力快速制作视频的问题。

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

总结

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

然后把视频剪辑中用来控制各种效果的参数,变成调用服务时传入的参数,就能实现各种效果的定制化了。

最后再总结一下通过这种写代码的方式完成视频剪辑的使用场景:

  1. 解决通过修改个别参数来批量制作视频的场景。
  2. 解决通过用户触发来自动化制作视频的场景。
  3. 解决不同场景需要不同定制化的制作视频的场景。

同时,利用serverless来完成视频剪辑,同样也解决了以下几个问题:

  1. 因为通常视频剪辑不是全天运行,利用serverless按量付费的特性能优化成本。
  2. 因为视频剪辑通常是重计算场景,利用serverless可选的高规格配置来应对这种重计算。
  3. 在批量制作视频的场景中通常会存在高并发,利用serverless自动弹性伸缩的特性能轻松应对高并发。

关于Serverless使用上或者视频剪辑大家有什么问题,欢迎给我留言。

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

  1. python自动化办公——定制化将电子签名批量签写到PDF文件

    python自动化办公--定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公--定制化将电子签名批量签写到PDF文件 1.安装依赖 2.需求分析 3.代码 1.安装依赖 首先需要下 ...

  2. python做视频剪辑_用python进行视频剪辑

    这篇文章主要介绍了如何用python进行视频剪辑,帮助大家更好的利用python处理视频,感兴趣的朋友可以了解下 一.目标 python,利用moviepy和pydub将一段视频进行区间切割 二.源码 ...

  3. 基于墨刀的视频剪辑软件Xshow原型化系统

    于墨刀的视频剪辑软件Xshow原型化系统 系统在线展示 Xshow是一款IOS平台的视频剪辑软件,本原型化系统以MVP(Minimum Viable Product)为设计目的,避免开发出客户并不真正 ...

  4. 0基础如何用几分钟学会视频剪辑

    随着短视频的热门,越来越多的人喜欢剪辑,那么如何用几分钟学会视频剪辑呢?不知道怎么操作的宝贝们,下面请随小编一起来试试. 材料准备: 一台Win系统的电脑 媒体梦工厂 视频素材若干 步骤演示: 运行[ ...

  5. python实现视频剪辑_MoviePy常用剪辑类及Python视频剪辑自动化

    视频地址:https://www.bilibili.com/video/BV1mv411k7Qv?p=4 导入方式 所有的剪辑类都可以从moviepy.editor模块中导入 Clip 所有剪辑类的基 ...

  6. 如何用视频剪辑软件Vegas剪视频

    剪辑,在如今这个社会,已经不是剪辑师们的专利了,它已经成为了一种大众化且近乎是必备的技能.这项技能在很多场合都需要用到,例如广大视频博主的职业需要.各类大型宣传片的制作.企业介绍的视频,又或是一些节日 ...

  7. 如何用视频剪辑软件制作画中画

    在看漫画的时候,经常会有这样的场景:主人公在睡觉或者思考的时候,脑子里想象的事物也会出现在了画面上.当然现实生活中这种情况是不会出现的,但是通过会声会影简体中文版,我们能够做出这样的效果,今天我们就来 ...

  8. 重磅!谷歌刚刚发布Objectron新数据集,可完美检测3D目标,超过4百万幅图像和15K视频剪辑!...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文转载自:新智元  |  编辑:QJP [导读]谷歌人工智能实验室近日发布 Objectron 数据 ...

  9. python 视频转场_视频剪辑什么鬼?Python 带你高效创作短视频

    近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. 视频剪辑过程中,Python 一 ...

最新文章

  1. mutable关键字
  2. uva 10602——Editor Nottoobad
  3. 国内比较好用的5款测试管理工具
  4. 使用物理硬盘_硬盘坏道的几种非专业修复方法介绍
  5. Mysql在可视化工具navicat中如何解决输入小数变整数的问题,(改变小数位数)
  6. 关于Dijkstra最短路径算法
  7. NumPy 文件数据读写
  8. python封装功能讲解_python学习28——面向对象实例讲解与封装
  9. PHP API微信网页授权接口实现
  10. oracle中exists和in的比较
  11. C语言项目 ---- 纸牌游戏(详细讲解 + 全部代码 + 运行图片)
  12. 泰坦尼克号的数据集的下载 tensflow
  13. 如何Altium Designer中输出元件清单(BOM表格)
  14. oracle10.2.0.4 dbca,10.2.0.4 DBCA problem :Error securing Database Control,...
  15. chkdsk 停滞_职业停滞–早期发现和治疗
  16. oracle dbms_utility.get_time,dbms_utility如何使用?
  17. 学号20189220 2018-2019-2 《密码与安全新技术专题》第四周作业
  18. Jquery实现弹幕效果
  19. nginx直接打印输出_ngnix配置打印请求入参和出参消息
  20. word,excel文件双击打开慢的问题

热门文章

  1. 基于经纬度的拜访轨迹问题
  2. 中国虹膜识别系统市场主要应用领域与投资战略规划研究报告2022年版
  3. 购买二手苹果笔记本有哪些注意事项
  4. MySQL实现字段自动填充功能
  5. 以jsp实现管理后台界面侧栏
  6. [算法]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径
  7. springboot 发邮件的方式
  8. YOLO系列 --- YOLOV7算法(四):YOLO V7算法网络结构解析
  9. MongoDB系列之适用场景和不适用场景
  10. Introduce·艺术类学科核心期刊推荐之《电影文学》