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

使用MoviePy保存文件失败,报TypeError错误求排查方案

问题

我在此处查阅过若干相关问题,但均未解决我的问题,或许我的情况存在特殊之处。

我尝试实现一个简单的功能:读取视频文件并重新写入。代码如下:

import os
os.environ['FFMPEG_BINARY'] = '/usr/bin/ffmpeg'

from moviepy.editor import VideoFileClip
name = 'test.mp4'

clip = VideoFileClip('./vids/'+name)

clip.write_videofile('./vids/'+name, codec='libx264', fps=30)

运行代码后出现如下错误:

---> 88     '-r', '%.02f' % fps,
     89     '-an', '-i', '-'
     90 ]
     91 if audiofile is not None:
     92     cmd.extend([
     93         '-i', audiofile,
     94         '-acodec', 'copy'
     95     ])

TypeError: must be real number, not NoneType

我已设置ffmpeg的环境变量(也在configure_defaults.py中修改过),这是参考其他问题的建议。此外我还在运行代码前执行了以下命令:

sudo apt -y update
sudo apt -y install ffmpeg
pip install decorator
pip install moviepy --upgrade
pip install ffmpeg --upgrade

我使用的是Debian GNU/Linux 10 (buster)系统,moviepy版本为1.0.3,ffmpeg版本为4.1.10-0+deb10u1。所有尝试均未解决问题,请问我遗漏了什么?

解决方案

这个错误的核心原因是原视频音频流读取异常,导致MoviePy内部的fps变量被设为None,结合你的环境和操作,可通过以下步骤解决:

  • 禁止覆盖原文件:直接读写同一路径会引发文件资源冲突,导致读取异常,先修改输出路径:

    clip.write_videofile('./vids/output_'+name, codec='libx264', fps=30)
    
  • 显式指定音频编码:跳过自动音频检测流程,避免因原视频音频格式兼容问题触发bug:

    clip.write_videofile('./vids/output_'+name, codec='libx264', audio_codec='aac', fps=30)
    
  • 验证原视频完整性:用ffmpeg检查原视频是否损坏或音频流异常:

    ffmpeg -i ./vids/test.mp4
    

    若输出存在报错,需先修复原视频文件。

  • 降级MoviePy版本:MoviePy 1.0.3与旧版ffmpeg(4.1.x)存在兼容性问题,降级到稳定兼容版本:

    pip install moviepy==0.2.3.5
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:10:24