You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MoviePy时文件已存在却触发FileNotFoundError问题求助

使用MoviePy时触发FileNotFoundError(文件实际存在)

问题说明

运行MoviePy脚本生成图片视频时,出现FileNotFoundError,但报错指向的图片文件实际存在于指定子目录中。

原代码

from moviepy.editor import *
import os

Pictures = []

Path = 'Pictures_To_Use'

#Adding Pics to the Pictures arrray
for pics in os.listdir(Path):
    clips = ImageClip(pics).set_duration(5)
    Pictures.append(Path + "/" + pics)
    
#UI
Title = input("Please input a title:")
print("-" * 36)
print("Title:" + Title)
print("-" * 36)
print("The Following Pictures will be Used:")
print(Pictures)
print("-" * 36)

#Export video
video = concatenate_videoclips(clips, method="compose")
video.write_videofile(Title, fps=30)

报错信息

PS C:\Users\GeekZoid\Desktop\YTVideo Maker> python -u "c:\Users\GeekZoid\Desktop\YTVideo Maker\Main.py"
Traceback (most recent call last):
  File "c:\Users\GeekZoid\Desktop\YTVideo Maker\Main.py", line 10, in <module>
    clips = ImageClip(pics).set_duration(5)
            ^^^^^^^^^^^^^^^
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\moviepy\video\VideoClip.py", line 889, in __init__
    img = imread(img)
          ^^^^^^^^^^^
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\imageio\__init__.py", line 97, in imread
    return imread_v2(uri, format=format, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\imageio\v2.py", line 226, in imread
    with imopen(uri, "ri", **imopen_args) as file:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\imageio\core\imopen.py", line 113, in imopen      
    request = Request(uri, io_mode, format_hint=format_hint, extension=extension)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\imageio\core\request.py", line 248, in __init__
    self._parse_uri(uri)
  File "C:\Users\GeekZoid\AppData\Local\Programs\Python\Python311\Lib\site-packages\imageio\core\request.py", line 408, in _parse_uri
    raise FileNotFoundError("No such file: '%s'" % fn)
FileNotFoundError: No such file: 'C:\Users\GeekZoid\Desktop\YTVideo Maker\Meme1.jpg

已尝试方法

  • 将文件路径添加到数组中
  • 遍历图片数组设置图片时长
    以上方案均无效

问题根源及修正方案

问题点:

  1. 路径错误:os.listdir(Path)返回的是子目录下的文件名,直接传给ImageClip(pics)会让程序在当前脚本目录找文件,而非Pictures_To_Use子目录,导致路径错误。
  2. 变量覆盖:循环中clips变量每次被新的ImageClip覆盖,最后仅保留最后一张图片的剪辑,且存储路径的Pictures数组未被用于生成剪辑。
  3. 拼接参数错误:concatenate_videoclips需要传入剪辑数组,而非单个剪辑对象。
  4. 导出文件名缺失后缀:直接用输入的Title作为导出文件名,可能导致系统无法识别视频格式。

修正后的代码

from moviepy.editor import *
import os

# 存储所有图片剪辑的数组
image_clips = []
image_path = 'Pictures_To_Use'

# 遍历子目录,生成完整路径并创建ImageClip
for pic_name in os.listdir(image_path):
    # 拼接完整文件路径(兼容Windows/Linux路径分隔符)
    full_path = os.path.join(image_path, pic_name)
    # 创建5秒时长的图片剪辑
    clip = ImageClip(full_path).set_duration(5)
    image_clips.append(clip)
    
# UI交互
title = input("请输入视频标题:")
# 自动添加.mp4后缀,确保视频格式可识别
output_file = f"{title}.mp4"

print("-" * 36)
print(f"标题:{title}")
print("-" * 36)
print("将使用以下图片:")
# 打印所有图片的完整路径,方便验证
for clip in image_clips:
    print(clip.filename)
print("-" * 36)

# 拼接所有图片剪辑
video = concatenate_videoclips(image_clips, method="compose")
# 导出视频
video.write_videofile(output_file, fps=30)

内容的提问来源于stack exchange,提问作者pugnacious unrest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:25:38