1.场景
如果你经常使用抖音和微信朋友圈的话,你一定发现,九宫格短视频最近非常火!
从朋友圈的九宫格图片到九宫格视频,前者似乎比传统的图片和视频更有个性、更有风格。除了传统的剪辑软件,还有其他更快捷方便的方式吗?比如:一键生成、批量生成、批量生成?
废话不多说,本文就帮你一键生成九宫格短视频,优雅地秀在朋友圈里!
2. 准备
在开始实战之前,使用pip安装2个依赖包,分别是:
1. 视频处理依赖性
2.图像处理依赖PIL
# 安装两个依赖项
# 视频处理
pip3
# 图像处理依赖项
pip3
3.练习
实战前准备一份原版视频素材
以下6个步骤将原始视频转换为九宫格视频。
1. 新建处理文件夹
创建新的临时文件夹和视频输出文件夹
():
“””
如果文件夹不存在则创建一个文件夹;否则不执行任何操作
: :
::
“””
ifos.path.():
操作系统()
# 创建新的临时文件夹和输出文件夹
(自己。)
(自己。)
2.获取视频的音频文件和视频基本信息
首先基于原始视频,使用构建一个对象来获取视频的宽度、高度、帧率、时长等信息
自我。=()
# 宽度、高度
自我。,自我。=自我..w,自我..h
# 帧速率
自身.fps = 自身..fps
# 视频时长
自我。= 自我。。
接下来从视频中提取BGM音频对象并写入文件
德欧(,):
“””
从视频中提取音频
: : 视频剪辑对象
: : 输出音频文件完整路径
::
“””
= 。
.()
3.处理视频帧
我们使用原始的视频剪辑对象的方法循环遍历所有视频帧图像。
需要指出的是,为了保证后续视频合成的方便,视频帧的文件名都是按顺序排列的。
我 = 1
..:
= .()
# 视频帧图像保存的临时路径(完整路径)
路径 = 自身。 + “d.jpg” % i
我 += 1
视频的每一帧被裁剪成9幅图像,我们可以明确指定图像之间的距离,然后计算新画布的宽和高,最后绘制一幅白色背景的图像。
# 1.切分成9张图片,并计算每张图片的宽和高
= int(自身/ 3)
= int(自身/ 3)
# 2. 新的宽度和高度
= 自身。 + 自身。 * 2
= 自身。 + 自身。 * 2
# 3. 重新创建画布背景
= .new(.模式,(,),
='')
接下来获取各个区域的坐标值,分别在水平和垂直方向上为第二、第三个图像区域添加间隔偏移,粘贴到上面刚刚新建的图像上。
# 4. 裁剪图片并粘贴到新画布中
# i: 水平, j: 垂直
论坛( 0, 3):
forj(0,3):
#作物面积
盒子 = (j * , i * , (j + 1) * , (i + 1) * )
# 根据区域裁剪图像
= .裁剪(盒子)
# 在水平和垂直方向上添加第二和第三个块的偏移距离
x = 0ifj == ( + 自身) * j
y = 0ifi == ( + 自身)* i
# 根据上面计算出的坐标值将9张图片粘贴到背景中
.(,(int(x),int(y)))
# 将图片保存到本地
.保存(路径)
4. 从一篮子图像中重新合成视频
将上一步生成的帧图像按照原视频的帧率转换成视频
需要注意的是,为了保证生成的视频不乱序,最好将帧图像按照名称进行排序。
(,,帧速率):
“””
将图片转换为视频
('./..//','./..//.mp4',20)
: :
: :
::
“””
= 列表(map(:+ x,os.()))
#注意:这里必须进行排序,保证所有帧的顺序一致
= ()
# 过滤掉非图像
= 列表((:.('.jpg'),))
# 图像剪辑
剪辑 = (,
fps=每秒帧数)
夹子。()
5.添加背景音乐
将原视频的音频文件设置为上一步生成的视频文件,然后写入新文件
(,,):
“””
视频合成音频
::
“””
= ()
= ()
#设置视频音频并写入文件
.().(,
= '',
='aac',
='温度-.m4a',
= 真
6.删除临时文件
使用上述视频处理的临时文件,包括帧图像和临时视频文件,将其删除
():
“””
删除文件夹
: :
::
“””
.()
# 删除临时文件
(自己。)
7.检查效果
以东关子、扎格、乌鸦的视频为例,处理之后最终效果如下:
4. 最后
通过以上一系列操作,我们就实现了将一段视频处理成九宫格视频