每当尝试将 write_videofile 运行到 moviepy 中的剪辑时,都会出现“TypeError:必须是实数,而不是 NoneType”

问题描述 投票:0回答:12

示例代码:

from moviepy.editor import *
clip = VideoFileClip('video.mp4')
clip.write_videofile('video2.mp4', fps=30)

出现以下信息后,表示正在构建和编写视频,

Moviepy - Building video video2.mp4.
Moviepy - Writing video video2.mp4

出现如下错误信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\User\Anaconda3\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
    return f(clip, *a, **k)
  File "C:\Users\User\Anaconda3\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\decorators.py", line 135, in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
  File "C:\Users\User\Anaconda3\lib\site-packages\decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\decorators.py", line 22, in convert_masks_to_RGB
    return f(clip, *a, **k)
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\video\VideoClip.py", line 300, in write_videofile
    ffmpeg_write_video(self, filename, fps, codec,
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\video\io\ffmpeg_writer.py", line 213, in ffmpeg_write_video
    with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
  File "C:\Users\User\Anaconda3\lib\site-packages\moviepy\video\io\ffmpeg_writer.py", line 88, in __init__
    '-r', '%.02f' % fps,
TypeError: must be real number, not NoneType

每当我尝试对 moviepy 中的任何类型的剪辑执行

write_videofile
时,就会发生这种情况。奇怪的是,昨天完全相同的代码对我有用,但今天突然就不行了。有什么建议是什么原因以及如何解决这个问题?

python ffmpeg video-processing moviepy
12个回答
23
投票

尝试升级你的 moviepy 包

pip install moviepy --upgrade

我在 1.0.0 中遇到了同样的问题。升级到 1.0.3 解决了这个问题。


5
投票

我在尝试使用

1.0.3
.
在Jupyter笔记本中显示视频剪辑时遇到了同样的问题(即使是moviepy的
clip.ipython_display

版本)。

在我的例子中,问题是由 moviepy 检测到的 FFmpeg 版本引起的,它是

ffmpeg-imageio
(不管是什么)。

如moviepy的安装页面所述,你基本上可以做两件事:

  • 使用
    FFMPEG_BINARY
    环境变量传递您要使用的 FFmpeg 二进制文件的位置。
  • 编辑文件
    config_defaults.py
    并将变量设置为二进制文件的位置。

在这两种情况下,您都需要重新启动进程/内核才能生效。就我而言,我在我的虚拟 env 文件夹(在 Linux 上)中找到了

config_defaults.py

<project dir>/.venv/lib/python3.7/site-packages/moviepy/config_defaults.py

4
投票

我的问题是:

---> 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

会保存MP3文件,但写入MP4文件时失败。

我解决了这个问题:

pip install ffmpeg --upgrade

2
投票

我有同样的问题,即使是 1.0.3。就我而言,我通过使用

brew reinstall ffmpeg
.

在 Homebrew 上重新安装 ffmpeg 来让它工作

0
投票

pip 安装 moviepy --升级 我花了很长时间。终于,这句话解决了问题


0
投票

如果升级你的 moviepy 包不适合你

尝试降级装饰包

pip install --upgrade decorator==4.4.2


0
投票

听起来很傻,但是 Python 代码文件在路径很长的文件夹中。将文件移动到较短的文件并且有效。


0
投票

Windows 11版本22h2,x64系统,Ryzen 7 这是关于我的配置的一些信息

  • 木星:1.0
  • jupyterlab:3.5.3
  • 蟒蛇:3.9.16
  • 电影:1.0.3
  • ffmpeg:1.4
  • pygame:2.3
  • 装饰器:4.4.2

跑遍jupyterlab

为了不出现“TypeError must be a real number”错误,我不得不 pip 安装这些特定版本的包。

  • pygame 未安装:错误
  • ffmpeg 未安装:错误
  • pygame 未安装:错误
  • 装饰器比 4.4.2 更旧或更新:错误
  • python 3.10:错误

-1
投票

我只是替换了函数中的参数: (文件 ffmpeg_writer.py 在 C:\Anaconda3\Lib\site-packages\moviepy ideo\io 中)

def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=None, ...

与:

def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=0.0, ...

-1
投票

在 mac 上有同样的问题。

brew reinstall ffmpeg 

为我工作。


-1
投票

对我来说,安装 pygame 解决了这个问题

pip install pygame

如这里所述:https://zulko.github.io/moviepy/install.html


-1
投票

尝试: fps=final_clip.fps

from moviepy.editor import *
clip = VideoFileClip('video.mp4')
clip.write_videofile('video2.mp4', fps=final_clip.fps)
© www.soinside.com 2019 - 2024. All rights reserved.