基于moviepy库利用图片制作简易视频

  • 改进了程序,增加了多线程运行,大幅提高速度
  1. 利用一个图片库,每次从中抽取一定数量的图片,裁剪成同一尺寸后,利用moviepy这个库的ImageSequenceClip批量生成简易视频,可加入音频。
  2. 每次运行程序都会将用于储存的文件夹刷新清空
  3. 加入了背景音乐,还有水印图片的镶嵌,因为利用moviepy的直接图片嵌入失败,也没有找到合适的解决方案,所以利用PIL先将图片拼接到每张图片上,在用moviepy合成视频,最后加上背景音乐。
  4. 更新!增加了多线程机制,提高生成速度
import moviepy.editor
from PIL import Image,ImageFile
import os.path  , random, shutil
import glob
from pydub import AudioSegmentImageFile.LOAD_TRUNCATED_IMAGES = True
fileDir = "图库"    #源图片文件夹路径
cut_Dir = "image"    #移动到新的文件夹路径\裁剪图片源
tarDir =cut_Dir+"/"
ima_url = "image/images"      #用于存放裁剪后的图片
v_url = "vedio"       #视频存放的文件夹
vedio_url = v_url+"/new"    #最后为视频保存的文件名
logo_url = "logo/二维码图.png"    #二维码的位置
music_url = "music"       #音乐所处文件夹
#主要参数设置
photo_num = 25    #一个视频使用多少图片
vedio_num = 1    #制作视频的数量# 加水印/二维码
# logo = Image.open(logo_url)#从图片库中提取图片
def moveFile(fileDir):pathDir = os.listdir(fileDir)    #取图片的原始路径# filenumber=len(pathDir)# rate=0.026    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1picknumber=int(photo_num) #按照rate比例从文件夹中取一定数量图片sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片# print (sample)Dir = fileDir + '/'for name in sample:# print(name)fileDir = Dir + name# print(fileDir)shutil.copy(fileDir, tarDir+name)# print(tarDir+name)# print(tarDir+"logo.jpg",logo)shutil.copy(logo_url,tarDir+"logo.jpg")returndef musicFile(fileDir):pathDir = os.listdir(fileDir)    #取音乐的原始路径sample = random.sample(pathDir, 1) print(fileDir+'/'+sample[0])return fileDir+'/'+sample[0]#把文件钟图片的分辨率进行修改
def convertjpg(jpgfile,outdir,width=1280,height=720):     img=Image.open(jpgfile) img=img.convert('RGB') try:  new_img=img.resize((width,height),Image.BILINEAR)# 加水印图片# new_img.paste(logo)     new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))  except Exception as e: print(e)  #刷新保存视频的文件夹,避免文件存在无法写入
try:os.mkdir("vedio")
except:shutil.rmtree("vedio")os.mkdir("vedio")for i in range(vedio_num):    #视频制作数量#图片文件夹的刷新try:os.mkdir(tarDir)      #尝试创建,若存在则失败except:# print("文件夹已存在")shutil.rmtree(tarDir)      #删除已有文件夹,重新创建os.mkdir(tarDir)os.mkdir(ima_url)        #创建多级文件#图片的挑选moveFile(fileDir)#图片裁剪rurl = cut_Dir +r"/*.jpg"for jpgfile in glob.glob(rurl):  #裁剪图片convertjpg(jpgfile,ima_url)  #图片写入的地址#生成视频try:image_clip = ImageSequenceClip(ima_url, fps=0.5)    #生成视频except:print("图片有错误,放弃制作")continue#写入视频vurl = vedio_url+"%d" %(i)vurl = vurl+".mp4"# print(vurl) audio_background = AudioFileClip(musicFile(music_url))image_clip = image_clip.set_audio(audio_background)    #加入音乐image_clip.write_videofile(vurl)     #将视频写入本地

改进了程序,增加了多线程运行,大幅提高速度

from moviepy.editor import *
import moviepy.editor
from PIL import Image,ImageFile
import os.path  , random, shutil
import glob
from pydub import AudioSegment
import time
from multiprocessing.pool import ThreadPool
import psutilImageFile.LOAD_TRUNCATED_IMAGES = True
fileDir = "图库"    #源图片文件夹路径
cut_Dir = "image"    #移动到新的文件夹路径\裁剪图片源
tarDir =cut_Dir+"/"
ima_url = "image/images"      #用于存放裁剪后的图片
v_url = "vedio"       #视频存放的文件夹
vedio_url = v_url+"/new"    #最后为视频保存的文件名
logo_url = "logo/二维码图.png"    #二维码的位置
music_url = "music"       #音乐所处文件夹
#主要参数设置
photo_num = 25    #一个视频使用多少图片
vedio_num = 10    #制作视频的数量# 加水印/二维码
# logo = Image.open(logo_url)#从图片库中提取图片
def moveFile(fileDir,writeDir):pathDir = os.listdir(fileDir)    #取图片的原始路径# filenumber=len(pathDir)# rate=0.026    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1picknumber=int(photo_num) #按照rate比例从文件夹中取一定数量图片sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片# print (sample)Dir = fileDir + '/'for name in sample:# print(name)fileDir = Dir + name# print(fileDir)shutil.copy(fileDir, writeDir+name)# print(tarDir+name)# print(tarDir+"logo.jpg",logo)shutil.copy(logo_url,writeDir+"logo.jpg")returndef musicFile(fileDir):pathDir = os.listdir(fileDir)    #取音乐的原始路径sample = random.sample(pathDir, 1) print(fileDir+'/'+sample[0])return fileDir+'/'+sample[0]#把文件钟图片的分辨率进行修改
def convertjpg(jpgfile,outdir,width=1280,height=720):     img=Image.open(jpgfile) img=img.convert('RGB') try:  new_img=img.resize((width,height),Image.BILINEAR)# 加水印图片# new_img.paste(logo)     new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))  except Exception as e: print(e)  def make(num):tarDir = cut_Dir+str(num)+"/"ima_url = tarDir+"images"try:os.mkdir(tarDir)      #尝试创建,若存在则失败os.mkdir(ima_url)        #创建多级文件except:# print("文件夹已存在")shutil.rmtree(tarDir)      #删除已有文件夹,重新创建os.mkdir(tarDir)os.mkdir(ima_url)        #创建多级文件#图片的挑选moveFile(fileDir,tarDir)#图片裁剪rurl = cut_Dir +"/*.jpg"for jpgfile in glob.glob(rurl):  #裁剪图片convertjpg(jpgfile,ima_url)  #图片写入的地址#生成视频image_clip = ImageSequenceClip(ima_url, fps=0.5)    #生成视频#写入视频vurl = vedio_url+"%d" %(num)vurl = vurl+".mp4"# print(vurl) audio_background = AudioFileClip(musicFile(music_url))image_clip = image_clip.set_audio(audio_background)    #加入音乐image_clip.write_videofile(vurl)     #将视频写入本地shutil.rmtree(tarDir)       #删除前面用于缓存图片的文件夹def main():starttime =time.time()#刷新保存视频的文件夹,避免文件存在无法写入try:os.mkdir("vedio")except:shutil.rmtree("vedio")os.mkdir("vedio")pool = ThreadPool(psutil.cpu_count())    #根据cpu线程数建立线程池returnValues = pool.map(make, range(vedio_num))endtime=time.time()print(endtime-starttime)main()

python利用图片制作简易视频相关推荐

  1. Python利用Moivepy给视频添加背景音乐源代码

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' @File : video_merge_audio.py @Time : 2022/12/27 15 ...

  2. python通过opencv使用图片制作简单视频(亲测)

    最近在学习视频制作,但是做起来太浪费时间了,我就一直在想能否使用python等脚本实现制作视频,因为我看视频网站上很多营销号视频就是通过图片制作视频的,播放量还不错,我准备试一试. 一.目标 1.自动 ...

  3. 无法找到CCTV直播MP4地址?七十行代码,简单使用FFplay直接观看还是下载CCTV栏目都轻松搞定(Python利用FLVCD硕鼠解析CCTV直播,FFplay播放并下载视频)

    我们在每天使用新闻的时候大都会以CCTV发布的新闻为准,我们的每天新闻收视率最高的还是我们的总台,大家闲来无事可能也会看一下央视网提供视频直播吧,看看还可以,但是我们可以发现我们完全解析不了,大家看一 ...

  4. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频

    本文实例为大家分享了python利用文件时间批量重命名照片和视频的具体代码,供大家参考,具体内容如下 问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代 ...

  5. python 多帧 超分辨_利用python-opencv生成视频帧数控制,和常见错误总结

    首先呢 利用opencv生成视频的例子相信网络上已经很多了.但是大多数例子都只是捕获一个摄像头就没了.但是在实际运用中会发现.因为涉及到图像处理,生成的视频要不就就是过快要不就是比实际时间长. 控制视 ...

  6. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例

    Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单, ...

  7. python金融大数据分析视频_Python金融大数据分析 PDF 全书超清版

    给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python金融.大数据分析方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小47.8 MB,希尔皮斯科编写,目前豆瓣.亚马逊. ...

  8. python利用thinker制作多页面切换的桌面应用实例教程

    本篇文章主要讲解,python利用thinker制作多页面的桌面实例教程.可以在一个主界面中相互进行切换和设置相关的表单信息,布局等方法 代码片段的实际效果 视频演示: python使用thinker ...

  9. [转载] python实现一个简易的计算器

    参考链接: 使用Python创建一个简单的计算器 python实现一个简易的计算器 from tkinter import from tkinter.ttk import * def my_frame ...

最新文章

  1. JZOJ 5438. 【NOIP2017提高A组集训10.31】Tree
  2. Linux读写执行(RWX)权限
  3. 搭建你的持续集成server - CruiseControl step by step(1)
  4. python爬虫怎么写多线程_Python爬虫【第3篇】【多线程】
  5. VMware与Centos系统
  6. 软件工程 交互设计 信息架构设计是什么
  7. wpf mysql课程设计_使用 WPF 和 MySQL 搭建小型人资管理系统——主要页面
  8. winformlabel自动换行
  9. 软件测试中测试文档的编写:测试流程测试用例
  10. 暗影精灵3 PLUS 安装黑苹果
  11. ETF定投的均线偏离策略分析
  12. VBA批量OCR识别提取身份证照片信息_以OCR识别为代表的人工智能技术在银行中有哪些应用?...
  13. 敏捷开发中团队如何面对失败的Sprint
  14. 基于SpringBoot的医疗管理系统(Java毕业设计)
  15. vue中引用echarts设置渐变色new echarts不能用
  16. AutoCAD.Net开发问题之:层表事件的响应(续)
  17. 计算机工作无法更改,win10系统计算机工作组名称无法更改的操作方案
  18. ios12.3beta2_如何回滚到iOS 11(如果您使用的是iOS 12 Beta)
  19. 燕十八 mysql_燕十八mysql笔记
  20. Decompiled .class file下载sourse失败

热门文章

  1. 在matlab中fscanf,matlab中fscanf的用法
  2. 基于Zepto框架实现开启宝箱
  3. Ubuntu重装笔记
  4. ipmsg在360 ARP防火墙后不能接收文件
  5. creator发布oppo小游戏
  6. 想要打印数码照片?“Pixelmator Pro”教你如何自行裁剪出清晰生动的照片!
  7. Ubuntu20.04安装PyCham,Ubuntu压缩与解压缩
  8. VS C++ MethodInvoker 倒数计时器
  9. ref和out参数(2)——ref(C# 参考)
  10. python绘制七彩圆圈_计算机等级考试二级Python讲座(一)