本文转载自Crossin的编程教室

如果你经常刷抖音和微信朋友圈,一定看到过这种九宫格短视频:

相比传统的视频,这种九宫格视频显得更有新意和个性。

那么除了用剪辑软件可以实现这种效果,是否有其他更加快捷方便的方式,比如:一键生成,批量生成?

本篇文章就将大家使用 Python 一键生成九宫格短视频,优雅地帮你在朋友圈装一次逼!

2.准备

在开始实战之前,使用 pip 安装 2 个依赖,分别是:

1、视频处理依赖 moviepy

2、图片处理依赖 PIL

# 安装两个依赖
# 视频处理
pip3 install moviepy# 图片处理依赖
pip3 install Pillow

3.实战一下

在实战之前,先准备一段原始视频素材

下面通过 6 个步骤,将原始视频转换为九宫格视频

1、新建处理文件夹

新建一个临时文件夹和一个视频输出文件夹

def mkdir_folder(file_path):"""创建一个文件夹,如果不存在就创建;否则不做处理:param file_path::return:"""if os.path.exists(file_path):returnos.mkdir(file_path)# 新建临时文件夹和输出文件夹
mkdir_folder(self.path_temp)
mkdir_folder(self.path_output)

2、获取视频的音频文件及视频基础信息

首先,根据原始视频,使用 moviepy 构建一个 VideoFileClip 对象,从而获取到视频的宽、高、帧率、时长等信息

self.video_raw_clip = VideoFileClip(file_path)# 宽、高
self.video_width, self.video_height = self.video_raw_clip.w, self.video_raw_clip.h# 帧率
self.fps = self.video_raw_clip.fps# 视频时长
self.during = self.video_raw_clip.duration

接着,从视频中提取 BGM 音频对象,并写入到文件中

def get_audio_from_video(video_raw_clip, output_path):"""从视频中提取音频:param video_raw_clip: 视频Clip对象:param output_path: 输出音频文件完整路径:return:"""audio = video_raw_clip.audioaudio.write_audiofile(output_path)return output_path

3、处理视频帧

我们使用原始视频 Clip 对象的 iter_frames() 方法,循环获取所有的视频帧图片

需要指出的是,为了保证后面视频合成的便捷性,这里对视频帧的文件名按顺序进行命令

i = 1
for frame in self.video_raw_clip.iter_frames():image = Image.fromarray(frame)# 视频帧图片保存的临时路径(完整路径)frame_file_complete_path = self.path_temp + "%04d.jpg" % ii += 1

视频每一帧都被裁剪成 9 张图片,我们可以显式指定图片之间的距离,然后计算出新画布的宽和高,最后绘制一个白底背景的图片

# 1、剪成9张图片,计算每张图片的宽、高
item_width = int(self.video_width / 3)
item_height = int(self.video_height / 3)# 2、新的宽、高
item_width_new = self.video_width + self.item_space * 2
item_height_new = self.video_height + self.item_space * 2# 3、重新建一个画布背景
new_image = Image.new(image.mode, (item_width_new, item_height_new),color='white')

接着,获取每一块区域的坐标值,针对横向、纵向第 2、3 个图片区域加上间隔偏移,粘贴到上面新建的图片上即可

# 4、裁剪图片,然后粘贴到新的画布中去
# i:横向、j:纵向
for i in range(0, 3):for j in range(0, 3):# 裁剪区域box = (j * item_width, i * item_height, (j + 1) * item_width, (i + 1) * item_height)# 根据区域,裁剪图片crop_image = image.crop(box)# 横向、纵向第2块和第3块,要加上偏移距离x = 0 if j == 0 else (item_width + self.item_space) * jy = 0 if i == 0 else (item_height + self.item_space) * i# 将9张图片,按照上面计算的坐标值,粘贴到背景中去new_image.paste(crop_image, (int(x), int(y)))# 保存图片到本地new_image.save(frame_file_complete_path)

4、一篮子图片重新合成视频

把上一步生成的帧图片,按照原视频的帧率转为视频

需要注意的是,为了保证生成的视频不会错乱,最好对帧图片按照名称进行一次排序

def pics_to_video(pics_path, output_path, fps):"""图片转为视频pics_to_video('./../gif_temp/', './../video_temp/temp1.mp4', 20):param pics_path::param output_path::return:"""image_paths = list(map(lambda x: pics_path + x, os.listdir(pics_path)))# 注意:这里必须进行一次排序,保证所有帧的顺序是一致image_paths = sort_strings_with_emb_numbers(image_paths)# 过滤掉非图片image_paths = list(filter(lambda image_path: image_path.endswith('.jpg'), image_paths))# 图片剪辑类clip = ImageSequenceClip(image_paths,fps=fps)clip.write_videofile(output_path)

5、加入 BGM 背景音乐

将原始视频的音频文件设置到上一步生成的视频文件,然后写入一个新的文件中去

def video_with_audio(path_video_raw, path_bgm_raw, output):"""视频合成音频:return:"""videoclip = VideoFileClip(path_video_raw)audioclip = AudioFileClip(path_bgm_raw)# 设置视频音频,并写入到文件中去videoclip.set_audio(audioclip).write_videofile(output,codec='libx264',audio_codec='aac',temp_audiofile='temp-audio.m4a',remove_temp=True)

6、删除临时文件

利用 shutil将上面视频处理的临时文件,包含帧图片、临时视频文件删除掉

def remove_folder(file_path):"""删除文件夹:param file_path::return:"""shutil.rmtree(file_path)# 删除临时文件
remove_folder(self.path_temp)

拿python生成朋友圈九宫格视频相关推荐

  1. php朋友圈九宫格怎么做,微信朋友圈九宫格视频怎么做 图片背景加九宫格视频随机播放的效果制作|微信九宫格视频...

    在如下图所示的新建项目窗口中,可以点击步骤一处的"浏览"按钮修改项目的存放位置,如果只是要输出为视频文件,这里的项目存放位置的设置用处也不大,最后输出视频文件后不保存项目即可:在步 ...

  2. python朋友圈教程_Python 生成你的朋友圈九宫格图片

    关于微信之前写过以下文章,有兴趣可以点击查看: 如何导出你的微信语音 c 盘空间又满了?微信清理神器帮你释放空间 微信撤回的消息也能看到! 如何备份可能被删的公众号文章和网页 如何在电脑上登陆多个微信 ...

  3. python朋友圈评论_利用Python实现朋友圈中的九宫格图片效果

    前言 大家应该经常在朋友圈看到有人发九宫格图片,其实质就是将一张图片切成九份,然后在微信中一起发这九张图即可. 说到切图,Python 就可以实现,主要用到的 Python 库为 Pillow,安装使 ...

  4. python短视频自动制作_Python 带你一键生成朋友圈超火的九宫格短视频

    1. 场景 如果你经常刷抖音和微信朋友圈,一定发现了最近九宫格短视频很火! ​从朋友圈九宫格图片,到九宫格视频,相比传统的图片视频,前者似乎更有个性和逼格 除了传统的剪辑软件可以实现,是否有其他更加快 ...

  5. python发朋友圈源码_Python 带你一键生成朋友圈超火的九宫格短视频

    1. 场景 如果你经常刷抖音和微信朋友圈,一定发现了最近九宫格短视频很火! ​从朋友圈九宫格图片,到九宫格视频,相比传统的图片视频,前者似乎更有个性和逼格 除了传统的剪辑软件可以实现,是否有其他更加快 ...

  6. python123九宫格输入法_【带你成为pyq最靓的仔】朋友圈九宫格(一)之图片切割篇...

    前言 这是一篇"蓄谋已久"的文章,为什么这么说呢? 记得那时我刚从健身房出来,当我在公交车站台等车的时候,无聊刷起了朋友圈,看到朋友圈里有好友在发九宫格的动态,就觉得好洋气呀,于是 ...

  7. 世界那么大,我想去看看。Django仿制微信朋友圈九宫格相册(1)

    前面文章里的Python和Django知识点很重要,但过于零散.我们学习最终的目的还是应用.我们今天就来看下如何利用Django仿制微信朋友圈的九宫格相册.本教程比较长,会分成2部分发布,欢迎持续关注 ...

  8. 《趣学音视频》这段“朋友圈模版视频”的扛鼎之作是如何诞生的

    大家好,这里是<趣学音视频>频道,我是 ucsheep 欢迎大家点赞.评论.关注.分享 长大,一个曾经憧憬,现在却感怀的事情 以上是一个"朋友圈视频模版"的扛鼎之作,整 ...

  9. java设计九宫格拼图软件哪个好用_抖音超火的朋友圈九宫格用什么软件做的? 抖音九宫格图片制作教程...

    抖音这种朋友圈九宫格用什么软件做的?最近,在抖音刷到好多这种九宫格的朋友圈截图,请问是怎么做的?突然火起来的抖音朋友圈九宫格,脚本之家小编也发现这样发朋友圈真的很好看也很有意思,特别是出去玩或者旅游拍 ...

最新文章

  1. H5拍照、预览、压缩、上传采坑记录
  2. java snack_JSONPath小试牛刀之Snack3
  3. MySQL 百万级数据量分页查询方法及其优化
  4. SolrJ查询索引库
  5. 代码示例:使用redis计数来控制单位时间内对某接口的访问量
  6. 3-7:常见任务和主要工具之文本处理
  7. javascript基础修炼(13)——记一道有趣的JS脑洞练习题
  8. python为什么那么多人用_为什么那么多人在学Python?
  9. Vue源码:mustache模板引擎学习
  10. 深度学习笔记_基本概念_梯度下降及示例代码
  11. 爬取豆瓣评论连接mysql_Scrapy爬取豆瓣图书数据并写入MySQL
  12. Atitit 艾提拉总结的操作硬件解决方案 目录 1.1. Atitit 列出wifi热点以及连接 1 1.2. 剪贴板 1 1.3. 屏幕 触摸与截屏 1 1.4. 性能 cpu 内存 硬盘 资源
  13. Java后端实战项目推荐-尚医通
  14. 一文62页PPT读懂中国供应链金融
  15. FFmpeg-Python 给视频添加文字
  16. 新一代最强开源UI自动化测试神器 Playwright - 元素定位
  17. js截取指定字符串后面的所有字符
  18. cat全链路监控_全链路监控选型
  19. 蓝拓扑便携式分析仪驱动程序_拔出便携式USB硬盘驱动器会损坏计算机吗?
  20. 游戏企业该如何做好网络安全防护?

热门文章

  1. 基于Three.js和MindAR实现的网页端WebAR人脸识别追踪功能的京剧换脸Demo(含源码)
  2. excel图表技巧:如何制作自动刷新的动态喜报
  3. 差分轮式机器人模型matlab,两轮差速机器人运动学分析和控制研究
  4. 不是冤家不碰头:贝索斯和马斯克入选福布斯“全球最抠门亿万富豪”榜单
  5. 做一个外出考察学习种桑养蚕方案
  6. matlab改变figure大小,Matlab Figure 调整大小、字号、线宽
  7. Windows PE
  8. 不要玩羊,会变得不幸
  9. 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
  10. 尝试简单的队列服务(张宴的HTTPSQS)