示例代码:
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
时,就会发生这种情况。奇怪的是,昨天完全相同的代码对我有用,但今天突然就不行了。有什么建议是什么原因以及如何解决这个问题?
尝试升级你的 moviepy 包
pip install moviepy --upgrade
我在 1.0.0 中遇到了同样的问题。升级到 1.0.3 解决了这个问题。
我在尝试使用
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
我的问题是:
---> 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
我有同样的问题,即使是 1.0.3。就我而言,我通过使用
brew reinstall ffmpeg
. 在 Homebrew 上重新安装 ffmpeg 来让它工作
pip 安装 moviepy --升级 我花了很长时间。终于,这句话解决了问题
如果升级你的 moviepy 包不适合你
尝试降级装饰包
pip install --upgrade decorator==4.4.2
听起来很傻,但是 Python 代码文件在路径很长的文件夹中。将文件移动到较短的文件并且有效。
Windows 11版本22h2,x64系统,Ryzen 7 这是关于我的配置的一些信息
跑遍jupyterlab
为了不出现“TypeError must be a real number”错误,我不得不 pip 安装这些特定版本的包。
我只是替换了函数中的参数: (文件 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, ...
在 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)