moviepy把多张图片转为视频
发布日期:2024-12-07 19:04 点击次数:157moviepy不错作念不少视频裁剪职责,不错大大进步效能.本文先容moviepy怎样把多张图片按一定的技能隔断duration吞并成视频,但不触及在视频中添加字幕和声息.
import os
#from moviepy.video.io.ImageSequenceClip import ImageSequenceClip
from moviepy.editor import ImageSequenceClip
from PIL import Image
#赢得图片尺寸
def get_image_size(image_path):
with Image.open(image_path) as img:
width, height = img.size
return (width, height)
#把图片转为视频
def convert_images_to_video(image_folder, output_video, fps, width, height):
# 赢得图片列表
image_files = [os.path.join(image_folder, img) for img in os.listdir(image_folder) if img.endswith((".jpg", ".jpeg", ".png"))]
# 按文献名排序
image_files.sort()
# 创建视频裁剪
clip = ImageSequenceClip(image_files, fps=fps)
#clip.set_duration(10)
# 建树协调的尺寸
#clip_resized = clip.resize(newsize=(width, height))
# 输出到文献
clip.write_videofile(output_video)
# 使用示例
convert_images_to_video('./same_size_images', 'output_video.mp4', fps=1, width=640, height=480)
先pip install moviepy确保告捷装置了moviepy. 如上代码,有几个细节:
1. moviepy.video.io.ImageSequenceClip import ImageSequenceClip 和 from moviepy.editor import ImageSequenceClip是网上资料辩认给出的import ImageSequenceClip的要道,不太明晰两者的区别,暂时用第2种引入
2. get_image_size函数为赢得一张图片的尺寸的要道,要是图片尺寸皆为协调大小,那么这个函数没用,要是要调试,看一个目次下通盘图片尺寸是否皆协调不错用这个函数print下尺寸(ImageSequeceClip构造的时候条款通盘图片尺寸一致,不然报错)
3. ImageSequenceClip构造函数中传入duration=10,但报错!没找到原因,也可能是moviepy的版块问题. 要是不成把每张图片的技能隔断固定,输出的视频技能会尽头短,莫得使用价值. fps暗示1秒几张图,要是fps=1,暗示1秒1张图,但把fps=0.1并不成完了一张图10秒隔断的后果.
换了个式样,完了duration的建树.
from moviepy.editor import ImageClip, concatenate_videoclips
import os
# 图片文献夹旅途
image_folder = './same_size_images'
# 加载通盘图片,并建树每张图片的表示时长为更长技能,比如5秒
image_files = sorted(os.listdir(image_folder))
image_clips = [ImageClip(os.path.join(image_folder, img)).set_duration(5) for img in image_files]
# 将通盘图片裁剪拼接成一个视频裁剪
video_clip = concatenate_videoclips(image_clips)
# 输出拼接后的视频文献,fps建树为24
output_file = 'output_video.mp4'
video_clip.write_videofile(output_file, fps=24, codec="libx264")
用ImageClip对每一张图生成视频并用set_duration建树固定技能隔断,然后再用concatenate_videoclips把通盘的吞并起来. 测试后有用!
再提供一个把一个目次通盘不同尺寸图片转为协调尺寸的代码:
from PIL import Image
import os.path
import glob
#把图片转为协调尺寸
def convertjpg(jpgfile,outdir,width=128*5,height=128*5):
img=Image.open(jpgfile)
try:
new_img=img.resize((width,height),Image.BILINEAR)
new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
except Exception as e:
print(e)
#把images目次通盘png后缀图片作念尺寸改造
for jpgfile in glob.glob("./images/*.png"):
convertjpg(jpgfile,"./out")
栏目分类