moviepy icon indicating copy to clipboard operation
moviepy copied to clipboard

AttributeError: 'NoneType' object has no attribute 'stdout' with Moviepy update

Open rruopp opened this issue 2 years ago • 0 comments

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

rruopp avatar Jul 06 '22 19:07 rruopp