繁体   English   中英

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

[英]Getting "TypeError: must be real number, not NoneType" whenever trying to run write_videofile to a clip in moviepy

示例代码:

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

每当我尝试对write_videofile中的任何类型的剪辑执行write_videofile时都会发生这种情况。 这很奇怪,因为昨天完全相同的代码对我有用,但今天突然不再适用了。 有什么建议是什么原因以及如何解决这个问题?

第一次安装moviepy后Jupyter Notebook出现这个错误,所以版本已经是1.03了。 在看到@Alex R的回答后,我尝试重新启动 Juptyer Notebook kernel。 只需重新启动 kernel 即可为我修复它。 我没有对环境变量或 config_defaults.py 文件做任何事情。

Windows 10

我有同样的问题,即使是 1.0.3。 就我而言,我通过使用brew reinstall ffmpeg ffmpeg 在 Homebrew 上brew reinstall ffmpeg使其工作。

尝试升级您的电影包

pip install moviepy --upgrade

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

pip install moviepy --upgrade 花了我很长时间。 最后,这句话解决了问题。

这对我有帮助:ffmpeg_writer.py(我的路径 C:\\Anaconda3\\Lib\\site-packages\\moviepy\\video\\io\\ffmpeg_writer.py),我替换了函数中的参数:def ffmpeg_write_video(clip, filename, fps, codec ="libx264", bitrate=None, ... on: def ffmpeg_write_video(clip, filename, fps, codec="libx264", bitrate=0.0, ...

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

就我而言,问题是由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

在 mac 上遇到了同样的问题。

brew reinstall ffmpeg 

为我工作。

试试: fps=final_clip.fps

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

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

尝试降级装饰器package

pip install --upgrade decorator==4.4.2

对我来说安装 pygame 纠正了问题

pip install pygame

如此处所述: https://zulko.github.io/moviepy/install.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM