常用的视频剪辑工具 Premiere、AE 等可以实现复杂的剪辑效果,在宣传视频制作、广告视频制作中被广泛应用。但在以下场景中,传统的视频剪辑工具或者模板化的视频处理软件无法满足批量、自动化和可定制的视频剪辑需求:
这类视频剪辑场景还具有使用时段集中、计算量大的特点。单独购买高规格的服务器利用率很低,买低规格的服务器计算能力无法满足要求。Serverless 按量计费的特点,以及高性能的计算能力,完美匹配了这样的需求场景。既能达到 100% 的利用率,又能按量使用高性能计算能力。同时,Serverless 支持丰富的可编程环境,可支持不同开发习惯的开发者,灵活性更高。
本文提到的所有视频剪辑的功能,均使用 FFmpeg 工具完成。
FFmpeg 是一个用来做视频处理的开源工具,支持视频剪辑、视频转码、视频编辑、音频处理、添加文字、视频拼接、拉流推流直播等功能。通过不同的 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 官网。
本文以 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)
注意:示例需要授权 SCF 操作 VOD 的权限,已默认勾选“运行角色”并自动完成函数运行角色的创建和所需 VOD 操作权限策略 QcloudVODFullAccess 的关联,如需调整,请选择“使用已有策略”或取消“运行角色”勾选。
注意:如需使用已有 API 服务创建 API 网关触发器或修改触发器配置,请选择“自定义创建”。
某在线教育企业,需要在每次学生上完网课之后把网课录像制作成一段 30 秒的视频,作为学生的学习成果。此案例有几个关键的信息:
综合上述特点,用 Serverless 云函数来做这样的视频剪辑具有多个优势:
案例的参考架构图如下所示:
通过编排、组合、复用上面列举的各种音视频剪辑的场景,即可满足多种场景诉求。将视频剪辑中用来控制各种效果的参数,转成调用服务时传入的参数,即可实现各种效果的定制化。
本页内容是否解决了您的问题?