为文件夹中MP3添加图片转MP4时遇AttributeError错误求助
问题解决:AttributeError: 'WindowsPath' object has no attribute 'endswith'
错误原因
你用pathlib.Path遍历得到的是WindowsPath对象,但旧版本的MoviePy不支持直接传入Path对象作为文件路径——它内部会调用字符串的endswith方法判断文件类型,而Path对象没有这个方法,因此触发了错误。
另外你的代码存在一个隐性问题:每次循环都会输出Final.mp4,会直接覆盖之前生成的文件,无法保留所有MP3对应的转换结果。
修正后的代码
from moviepy.editor import * from pathlib import Path music_folder = Path(r'C:\Users\PycharmProjects\Audio') # 变量名避免用大写开头的Image,防止和内置模块冲突 image_clip = ImageClip(r'C:\Users\PycharmProjects\Image\image.jpg') for audio_path in music_folder.glob("*.mp3"): # 将Path对象转为字符串传入AudioFileClip audio_clip = AudioFileClip(str(audio_path)) # 设置图片时长匹配音频长度 video_clip = image_clip.set_duration(audio_clip.duration) video_clip = video_clip.set_audio(audio_clip) # 生成对应文件名:替换原MP3后缀为MP4 output_file = audio_path.with_suffix('.mp4') # 输出路径同样要转为字符串 video_clip.write_videofile(str(output_file), fps=4) # 释放资源,避免多文件处理时内存占用过高 audio_clip.close() video_clip.close()
关键修改点
- 通过
str()将遍历得到的WindowsPath对象转为字符串,适配MoviePy的参数要求 - 用
with_suffix('.mp4')为每个MP3生成独立的输出文件,避免覆盖 - 添加资源释放代码,防止处理多个文件时内存溢出
- 修正变量命名(
Image改为image_clip),避免和Python内置模块命名冲突
内容的提问来源于stack exchange,提问作者Akshay Lokhande
相关产品推荐
相关产品推荐

