用moviepy图片转视频出了一些问题

用moviepy图片转视频,视频里面只有第一张图片是正常显示的,其他图片都是波纹图,可以帮忙看看是哪里出了问题吗

img

img

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7665296
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python 利用moviepy覆盖视频中某区域画面
  • 除此之外, 这篇博客: moviepy简介及安装中的 2.2、使用moviepy的好处 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 使用方便:基本操作可以在一行中完成。对于新手来说,代码很容易学习和理解
    • 操作灵活:可以完全控制视频和音频的帧,很容易创建自己的效果,非常简单
    • 可移植:代码使用非常通用的软件(Numpy和FFMPEG),几乎可以在任何带有任意版本的Python的机器上运行
  • 您还可以看一下 董付国老师的Python可以这样学(第12季:音频处理与视频处理实战)课程中的 moviepy为视频增加欢呼声、鼓掌声和背景音乐小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,只有第一张图片正常显示,其他图片都显示成波纹图,可能是图片格式或者大小不匹配导致的。可以尝试将所有图片都转换成统一的格式和大小,再进行视频合成。

    具体操作步骤如下:

    1. 确认每张图片的格式和大小是否一致。如果不一致,可以用Pillow库将它们转换成一致的格式和大小。

    代码示例:

    from PIL import Image
    
    # 将图片转换成统一的格式和大小
    def convert_image(image_path, format='JPEG', size=(1920, 1080)):
        with Image.open(image_path) as im:
            im = im.convert('RGB')  # 转换成RGB格式
            im.thumbnail(size)  # 缩放到指定大小
            output_path = image_path.replace('.png', f'.{format.lower()}')  # 转换后的文件名
            im.save(output_path, format=format)
            return output_path
    
    1. 使用MoviePy的ImageSequenceClip()函数将它们转换成视频片段。

    代码示例:

    from moviepy.editor import ImageSequenceClip
    
    # 将图片转换成视频片段
    def image_to_clip(image_path, duration=1):
        return ImageSequenceClip([image_path], fps=1/duration)
    
    1. 使用concatenate_videoclips()函数合成所有视频片段。

    代码示例:

    from moviepy.editor import concatenate_videoclips
    
    def images_to_video(image_paths, duration=1):
        clips = [image_to_clip(img_path, duration=duration) for img_path in image_paths]
        final_clip = concatenate_videoclips(clips)
        final_clip.write_videofile('output.mp4')
    

    以上是一种大致的解决方案,具体实现可能需要根据实际情况进行调整。