使用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
已尝试方法
- 将文件路径添加到数组中
- 遍历图片数组设置图片时长
以上方案均无效
问题根源及修正方案
问题点:
- 路径错误:
os.listdir(Path)返回的是子目录下的文件名,直接传给ImageClip(pics)会让程序在当前脚本目录找文件,而非Pictures_To_Use子目录,导致路径错误。 - 变量覆盖:循环中
clips变量每次被新的ImageClip覆盖,最后仅保留最后一张图片的剪辑,且存储路径的Pictures数组未被用于生成剪辑。 - 拼接参数错误:
concatenate_videoclips需要传入剪辑数组,而非单个剪辑对象。 - 导出文件名缺失后缀:直接用输入的
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
相关产品推荐
相关产品推荐

