moviepy把多张图片转为视频
虎嗅网洞察

虎嗅网洞察

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

moviepy把多张图片转为视频

发布日期:2024-12-07 19:04    点击次数:157

moviepy不错作念不少视频裁剪职责,不错大大进步效能.本文先容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")



虎嗅网洞察

moviepy不错作念不少视频裁剪职责,不错大大进步效能.本文先容moviepy怎样把多张图片按一定的技能隔断duration吞并成视频,但不触及在视频中添加字幕和声息. import os #from moviepy.video.io.ImageSequence