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

Sat*_*ato 17 python ffmpeg video-processing moviepy

示例代码:

from moviepy.editor import *
clip = VideoFileClip('video.mp4')
clip.write_videofile('video2.mp4', fps=30)
Run Code Online (Sandbox Code Playgroud)

显示以下消息后,表明视频正在构建和写入,

Moviepy - Building video video2.mp4.
Moviepy - Writing video video2.mp4
Run Code Online (Sandbox Code Playgroud)

出现以下错误消息:

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
Run Code Online (Sandbox Code Playgroud)

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

Ram*_*ngh 27

尝试升级你的 moviepy 包

pip install moviepy --upgrade
Run Code Online (Sandbox Code Playgroud)

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

  • 确实出现了这个错误,但 moviepy 已经是 1.0.3 了。然后怎样呢?(乌班图)。 (14认同)
  • 如果您使用的是 jupyter 笔记本,请不要忘记重新启动内核! (9认同)

小智 8

我的问题呈现为:

---> 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
Run Code Online (Sandbox Code Playgroud)

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

我用以下方法解决了这个问题:

pip install ffmpeg --upgrade
Run Code Online (Sandbox Code Playgroud)


Ale*_*x R 6

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

就我而言,问题是由 moviepy 检测到的 FFmpeg 版本引起的ffmpeg-imageio(无论是什么)。

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

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

在这两种情况下,您都需要重新启动进程/内核才能生效。就我而言,我在config_defaults.py虚拟环境文件夹(在 Linux 上)中找到了以下位置:

<project dir>/.venv/lib/python3.7/site-packages/moviepy/config_defaults.py
Run Code Online (Sandbox Code Playgroud)