moviepy
moviepy copied to clipboard
[Linux] Python TypeError on fps param in write_videofile method
Python code:
from moviepy.editor import *
video_clip = VideoFileClip("/home/xffrom/Downloads/1080p.mp4")
audio_clip = AudioFileClip("/home/xffrom/Downloads/audio_0.mp4")
final_clip = video_clip.set_audio(audio_clip)
final_clip.write_videofile("output.mp4", fps=60)
print("Processing complete!")
Expected Behavior
Processing complete
Actual Behavior
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[13], line 8
4 audio_clip = AudioFileClip("/home/xffrom/Downloads/audio_0.mp4")
6 final_clip = video_clip.set_audio(audio_clip)
----> 8 final_clip.write_videofile("output.mp4", fps=60)
10 print("Processing complete!")
File ~/jupyter-env/lib/python3.11/site-packages/decorator.py:232, in fun(*args, **kw)
230 evaldict = dict(_call_=caller, _func_=func)
231 es = ''
--> 232 for i, extra in enumerate(extras):
233 ex = '_e%d_' % i
234 evaldict[ex] = extra
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/decorators.py:54, in requires_duration(f, clip, *a, **k)
52 raise ValueError("Attribute 'duration' not set")
53 else:
---> 54 return f(clip, *a, **k)
File ~/jupyter-env/lib/python3.11/site-packages/decorator.py:232, in fun(*args, **kw)
230 evaldict = dict(_call_=caller, _func_=func)
231 es = ''
--> 232 for i, extra in enumerate(extras):
233 ex = '_e%d_' % i
234 evaldict[ex] = extra
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/decorators.py:135, in use_clip_fps_by_default(f, clip, *a, **k)
130 new_a = [fun(arg) if (name=='fps') else arg
131 for (arg, name) in zip(a, names)]
132 new_kw = {k: fun(v) if k=='fps' else v
133 for (k,v) in k.items()}
--> 135 return f(clip, *new_a, **new_kw)
File ~/jupyter-env/lib/python3.11/site-packages/decorator.py:232, in fun(*args, **kw)
230 evaldict = dict(_call_=caller, _func_=func)
231 es = ''
--> 232 for i, extra in enumerate(extras):
233 ex = '_e%d_' % i
234 evaldict[ex] = extra
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/decorators.py:22, in convert_masks_to_RGB(f, clip, *a, **k)
20 if clip.ismask:
21 clip = clip.to_RGB()
---> 22 return f(clip, *a, **k)
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/video/VideoClip.py:300, in VideoClip.write_videofile(self, filename, fps, codec, bitrate, audio, audio_fps, preset, audio_nbytes, audio_codec, audio_bitrate, audio_bufsize, temp_audiofile, rewrite_audio, remove_temp, write_logfile, verbose, threads, ffmpeg_params, logger)
292 if make_audio:
293 self.audio.write_audiofile(audiofile, audio_fps,
294 audio_nbytes, audio_bufsize,
295 audio_codec, bitrate=audio_bitrate,
296 write_logfile=write_logfile,
297 verbose=verbose,
298 logger=logger)
--> 300 ffmpeg_write_video(self, filename, fps, codec,
301 bitrate=bitrate,
302 preset=preset,
303 write_logfile=write_logfile,
304 audiofile=audiofile,
305 verbose=verbose, threads=threads,
306 ffmpeg_params=ffmpeg_params,
307 logger=logger)
309 if remove_temp and make_audio:
310 if os.path.exists(audiofile):
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/video/io/ffmpeg_writer.py:213, in ffmpeg_write_video(clip, filename, fps, codec, bitrate, preset, withmask, write_logfile, audiofile, verbose, threads, ffmpeg_params, logger)
211 logfile = None
212 logger(message='Moviepy - Writing video %s\n' % filename)
--> 213 with FFMPEG_VideoWriter(filename, clip.size, fps, codec = codec,
214 preset=preset, bitrate=bitrate, logfile=logfile,
215 audiofile=audiofile, threads=threads,
216 ffmpeg_params=ffmpeg_params) as writer:
218 nframes = int(clip.duration*fps)
220 for t,frame in clip.iter_frames(logger=logger, with_times=True,
221 fps=fps, dtype="uint8"):
File ~/jupyter-env/lib/python3.11/site-packages/moviepy/video/io/ffmpeg_writer.py:88, in FFMPEG_VideoWriter.__init__(self, filename, size, fps, codec, audiofile, preset, bitrate, withmask, logfile, threads, ffmpeg_params)
77 self.ext = self.filename.split(".")[-1]
79 # order is important
80 cmd = [
81 get_setting("FFMPEG_BINARY"),
82 '-y',
83 '-loglevel', 'error' if logfile == sp.PIPE else 'info',
84 '-f', 'rawvideo',
85 '-vcodec', 'rawvideo',
86 '-s', '%dx%d' % (size[0], size[1]),
87 '-pix_fmt', 'rgba' if withmask else 'rgb24',
---> 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
Specifications
- Python Version: Python 3.11.5
- MoviePy Version: moviepy-1.0.3
- Platform Name: Ubuntu
- Platform Version: 23.01
any update on this? I'm also facing the same issue
+1
+1
The current stable version of moviepy (1.0.3) is not functioning properly. It is recommended to upgrade to the upcoming version 2 release.
To upgrade, please run the following command:
pip install moviepy --pre --upgrade
2.0.0.dev2 well work
@koorukuroo The v2.0.0.dev2 Have Some Bugs. some incomplete features.
you should ose the older version of the python.
1.0.2 works for me as well for those who don't want to use the dev version
I'm assuming this is a duplicate of #1986? In which case this issue should be closed in favour of the other one.