本文转载自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. 人工智能模型数据泄露的攻击与防御研究综述
  2. 边缘计算芯片格局分析
  3. flex+hibernate 中java的pojo与as的pojo的映射问题
  4. Vivado2015.4使用教程(一个完成工程的建立)
  5. xfce右键open in terminal失效问题解决
  6. php编译成二进制文件_2020年小米高级 PHP 工程师面试题
  7. 超声波测距仪编程_超声波测距仪参考(含原理图程序)
  8. python中下划线开头的命名_Python标识符规则 行与缩进 注释
  9. Java排序:冒泡排序
  10. Python I/O及FIle方法
  11. 真赞!阿里开源的这款分布式事务框架,不愧为民族之光
  12. matlab卷积代码,卷积的Matlab代码实现
  13. 无线网卡被服务器禁用,无线网卡总是被禁用,请教解决方法
  14. 【使用pycharm管理github仓库】github代码版本控制
  15. 这8行代码的惊艳与反思
  16. 这两款好用的识别图片文字的软件app值得你们收藏
  17. redis连接超时,本地连接不上服务器上的redis
  18. ③⭐全网首发☀️数据有道之数据库技术❤️干货大全【持续更新】❗❗❗
  19. 苹果商城怎么调成中文_苹果手机没声音?苹果专业维修帮你
  20. 【安卓】腾讯Bugly之应用升级热更新-热更新

热门文章

  1. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN
  2. Think Fast, Talk Smart - 8: 如何用非母语自信地进行交流
  3. 关闭iTunes的强制自动文件备份 -(电脑空间不足,无法升级iPhone)
  4. VDI(远程桌面)是什么?
  5. 结合569个抖音+电商的成功案例,总结出新一套的短视频运营方案
  6. 课堂笔记学习java(初级)
  7. B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)重点讲解模型验证、特征优化、模型融合等
  8. 开大计算机应用基础本科,(2021更新)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业三试题及答案...
  9. 安卓申请电源锁与释放电源锁
  10. 解决TexStudio编写LaTeX论文引用文献问题:正文引用处出现[?],参考文献也不显现