moviepy
moviepy copied to clipboard
AttributeError: 'NoneType' object has no attribute 'stdout' with Moviepy update
Hi there -
I am getting a similar error to this post: https://github.com/Zulko/moviepy/issues/938 However, I am using the newest version of Moviepy, which is mentioned as the solution. The program unsuccessfully attempts to process a few videos but eventually gives the error listed below. Any help would be appreciated!
Error produced:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
C:\Users\GREENH~1\AppData\Local\Temp/ipykernel_8456/3472042695.py in <module>
2 clip = video.subclip(cut, cut+3.5)
3 name = 'trial_%s.mp4' % idx
----> 4 clip.write_videofile(name)
<decorator-gen-172> in 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)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in requires_duration(f, clip, *a, **k)
52 raise ValueError("Attribute 'duration' not set")
53 else:
---> 54 return f(clip, *a, **k)
55
56
<decorator-gen-171> in 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)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in use_clip_fps_by_default(f, clip, *a, **k)
133 for (k,v) in k.items()}
134
--> 135 return f(clip, *new_a, **new_kw)
<decorator-gen-170> in 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)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in convert_masks_to_RGB(f, clip, *a, **k)
20 if clip.ismask:
21 clip = clip.to_RGB()
---> 22 return f(clip, *a, **k)
23
24 @decorator.decorator
~\Anaconda3\lib\site-packages\moviepy\video\VideoClip.py in 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)
291 logger(message="Moviepy - Building video %s." % filename)
292 if make_audio:
--> 293 self.audio.write_audiofile(audiofile, audio_fps,
294 audio_nbytes, audio_bufsize,
295 audio_codec, bitrate=audio_bitrate,
<decorator-gen-162> in write_audiofile(self, filename, fps, nbytes, buffersize, codec, bitrate, ffmpeg_params, write_logfile, verbose, logger)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in requires_duration(f, clip, *a, **k)
52 raise ValueError("Attribute 'duration' not set")
53 else:
---> 54 return f(clip, *a, **k)
55
56
~\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py in write_audiofile(self, filename, fps, nbytes, buffersize, codec, bitrate, ffmpeg_params, write_logfile, verbose, logger)
204 "parameter in write_audiofile.")
205
--> 206 return ffmpeg_audiowrite(self, filename, fps, nbytes, buffersize,
207 codec=codec, bitrate=bitrate,
208 write_logfile=write_logfile, verbose=verbose,
<decorator-gen-126> in ffmpeg_audiowrite(clip, filename, fps, nbytes, buffersize, codec, bitrate, write_logfile, verbose, ffmpeg_params, logger)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in requires_duration(f, clip, *a, **k)
52 raise ValueError("Attribute 'duration' not set")
53 else:
---> 54 return f(clip, *a, **k)
55
56
~\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py in ffmpeg_audiowrite(clip, filename, fps, nbytes, buffersize, codec, bitrate, write_logfile, verbose, ffmpeg_params, logger)
164 ffmpeg_params=ffmpeg_params)
165
--> 166 for chunk in clip.iter_chunks(chunksize=buffersize,
167 quantize=True,
168 nbytes=nbytes, fps=fps,
~\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py in iter_chunks(self, chunksize, chunk_duration, fps, quantize, nbytes, logger)
83 assert(size <= chunksize)
84 tt = (1.0/fps)*np.arange(pospos[i], pospos[i+1])
---> 85 yield self.to_soundarray(tt, nbytes=nbytes, quantize=quantize,
86 fps=fps, buffersize=chunksize)
87
<decorator-gen-161> in to_soundarray(self, tt, fps, quantize, nbytes, buffersize)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in requires_duration(f, clip, *a, **k)
52 raise ValueError("Attribute 'duration' not set")
53 else:
---> 54 return f(clip, *a, **k)
55
56
~\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py in to_soundarray(self, tt, fps, quantize, nbytes, buffersize)
125 #print tt.max() - tt.min(), tt.min(), tt.max()
126
--> 127 snd_array = self.get_frame(tt)
128
129 if quantize:
<decorator-gen-128> in get_frame(self, t)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in wrapper(f, *a, **kw)
87 new_kw = {k: fun(v) if k in varnames else v
88 for (k,v) in kw.items()}
---> 89 return f(*new_a, **new_kw)
90 return decorator.decorator(wrapper)
91
~\Anaconda3\lib\site-packages\moviepy\Clip.py in get_frame(self, t)
91 return frame
92 else:
---> 93 return self.make_frame(t)
94
95 def fl(self, fun, apply_to=None, keep_duration=True):
~\Anaconda3\lib\site-packages\moviepy\Clip.py in <lambda>(t)
134
135 #mf = copy(self.make_frame)
--> 136 newclip = self.set_make_frame(lambda t: fun(self.get_frame, t))
137
138 if not keep_duration:
~\Anaconda3\lib\site-packages\moviepy\Clip.py in <lambda>(gf, t)
185 apply_to = []
186
--> 187 return self.fl(lambda gf, t: gf(t_func(t)), apply_to,
188 keep_duration=keep_duration)
189
<decorator-gen-128> in get_frame(self, t)
~\Anaconda3\lib\site-packages\moviepy\decorators.py in wrapper(f, *a, **kw)
87 new_kw = {k: fun(v) if k in varnames else v
88 for (k,v) in kw.items()}
---> 89 return f(*new_a, **new_kw)
90 return decorator.decorator(wrapper)
91
~\Anaconda3\lib\site-packages\moviepy\Clip.py in get_frame(self, t)
91 return frame
92 else:
---> 93 return self.make_frame(t)
94
95 def fl(self, fun, apply_to=None, keep_duration=True):
~\Anaconda3\lib\site-packages\moviepy\audio\io\AudioFileClip.py in <lambda>(t)
75 self.buffersize = self.reader.buffersize
76
---> 77 self.make_frame = lambda t: self.reader.get_frame(t)
78 self.nchannels = self.reader.nchannels
79
~\Anaconda3\lib\site-packages\moviepy\audio\io\readers.py in get_frame(self, tt)
180 (fr_min - self.buffer_startframe)
181 < len(self.buffer)):
--> 182 self.buffer_around(fr_min)
183 elif not (0 <=
184 (fr_max - self.buffer_startframe)
~\Anaconda3\lib\site-packages\moviepy\audio\io\readers.py in buffer_around(self, framenumber)
238 conserved = current_f_end - new_bufferstart + 1
239 chunksize = self.buffersize-conserved
--> 240 array = self.read_chunk(chunksize)
241 self.buffer = np.vstack([self.buffer[-conserved:], array])
242 else:
~\Anaconda3\lib\site-packages\moviepy\audio\io\readers.py in read_chunk(self, chunksize)
111 chunksize = int(round(chunksize))
112 L = self.nchannels*chunksize*self.nbytes
--> 113 s = self.proc.stdout.read(L)
114 dt = {1: 'int8',2:'int16',4:'int32'}[self.nbytes]
115 if hasattr(np, 'frombuffer'):
AttributeError: 'NoneType' object has no attribute 'stdout'
Code that produces error:
for idx, cut in enumerate(cut_times):
clip = video.subclip(cut, cut+3.5)
name = 'trial_%s.mp4' % idx
clip.write_videofile(name)
Specs:
Python Version: 3.9.7 Moviepy Version: 1.0.3 Platform Name: Windows Platform Version: 10