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

为文件夹中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:45:33