fineconey 发表于 2023-10-15 22:04:32

关于使用moviepy模块报错的求助。

源代码如下:
import os
from moviepy.editor import ImageSequenceClip
from moviepy.video.compositing.concatenate import concatenate_videoclips


def convert_gif_to_video(folder_path):
    # 获取文件夹名称
    folder_name = os.path.basename(folder_path)

    # 获取文件夹下的所有gif文件
    gif_files =

    if len(gif_files) == 0:
      print("该文件夹下没有gif文件")
      return

    # 排序gif文件(可选)
    gif_files.sort()

    # 读入gif文件序列
    frames =

    # 拼接gif文件序列为一个视频
    video = concatenate_videoclips(frames,method="compose", transition=None, bg_color=None, ismask=False, padding = 0)

    # 保存视频为mp4文件
    output_file = os.path.join(folder_path, f"{folder_name}.mp4")
    video.write_videofile(output_file, codec="libx264")

    print("转换完成,生成的视频文件为:", output_file)


# 指定文件夹路径
folder_path = r"G:\000\40"

# 调用函数进行转换
convert_gif_to_video(folder_path)


想实现的功能是,把某个文件夹下的所有gif文件合并成一个视频mp4文件,以该文件夹命名。
但是报错如下

D:\Python\python.exe E:\【Python项目】\--临时可删除--\000.py
Traceback (most recent call last):
File "E:\【Python项目】\--临时可删除--\000.py", line 37, in <module>
    convert_gif_to_video(folder_path)
File "E:\【Python项目】\--临时可删除--\000.py", line 21, in convert_gif_to_video
    frames =
File "E:\【Python项目】\--临时可删除--\000.py", line 21, in <listcomp>
    frames =
File "D:\Python\lib\site-packages\moviepy\video\io\ImageSequenceClip.py", line 77, in __init__
    for f in os.listdir(sequence)])
NotADirectoryError: 目录名称无效。: 'G:\\000\\40\\430_t61236y.gif'

搞不懂为什么会报错,报错的居然是个文件。好奇怪,有知道的大佬吗?谢谢

isdkz 发表于 2023-10-15 22:04:42

错误信息显示,程序在执行ImageSequenceClip时遇到了异常。异常信息中提到的'G:\\000\\40\\430_t61236y.gif'是一个文件而不是一个目录。这表明程序无法正确读取文件夹下的所有文件。



这个问题可能是由于文件夹路径错误或文件夹中存在不是.gif格式的文件。你可以尝试使用以下代码来检查文件夹路径是否正确,并过滤掉不是.gif格式的文件:



gif_files =





如果问题仍然存在,请检查文件夹路径是否正确,并确保文件夹中只有.gif格式的文件。

陶远航 发表于 2023-10-15 22:05:24

你的错误信息是 NotADirectoryError: 目录名称无效。: 'G:\\\\000\\\\40\\\\430_t61236y.gif'。这个错误是因为你在 ImageSequenceClip 函数中传入了一个文件路径,而该函数期望的是一个目录路径。

ImageSequenceClip 函数的设计是用来读取一个目录下的所有图片文件,并将它们合并成一个视频。在你的代码中,你试图将每一个 gif 文件作为一个图片序列来处理,这是不正确的。

如果你想将多个 gif 文件合并成一个视频,你应该首先将每个 gif 文件转换为一个 VideoClip 对象,然后再将这些 VideoClip 对象合并。你可以使用 VideoFileClip 函数来读取 gif 文件并将其转换为 VideoClip 对象。

以下是修改后的代码:

import os
from moviepy.editor import VideoFileClip
from moviepy.video.compositing.concatenate import concatenate_videoclips

def convert_gif_to_video(folder_path):
    # 获取文件夹名称
    folder_name = os.path.basename(folder_path)

    # 获取文件夹下的所有gif文件
    gif_files =

    if len(gif_files) == 0:
      print(\"该文件夹下没有gif文件\")
      return

    # 排序gif文件(可选)
    gif_files.sort()

    # 读入gif文件序列
    clips =

    # 拼接gif文件序列为一个视频
    video = concatenate_videoclips(clips)

    # 保存视频为mp4文件
    output_file = os.path.join(folder_path, f\"{folder_name}.mp4\")
    video.write_videofile(output_file, codec=\"libx264\")

    print(\"转换完成,生成的视频文件为:\", output_file)

# 指定文件夹路径
folder_path = r\"G:\\000\\40\"

# 调用函数进行转换
convert_gif_to_video(folder_path)


这段代码将读取指定文件夹下的所有 gif 文件,将它们转换为 VideoClip 对象,然后将这些 VideoClip 对象合并成一个视频,并保存为 mp4 文件。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 关于使用moviepy模块报错的求助。