Python 为什么在moviepy中尝试将音频文件添加到视频时出错?

Python 为什么在moviepy中尝试将音频文件添加到视频时出错?,python,moviepy,Python,Moviepy,我想使用python moviePy库将音频文件添加到视频文件中。 但不幸的是,我得到了这个错误。最初我只是想获取原始视频文件的持续时间,然后更改音频的大小,但这对我没有帮助。 如何解决这个问题 数据变量包含一些其他变量的列表,如视频名称、起点、终点等。 此代码旨在将一个视频放在另一个视频中 这是我的代码: def video_cut(data, movie1): folder,movie2, lista, end, start = data movie2 = f'../{m

我想使用python moviePy库将音频文件添加到视频文件中。 但不幸的是,我得到了这个错误。最初我只是想获取原始视频文件的持续时间,然后更改音频的大小,但这对我没有帮助。 如何解决这个问题

数据
变量包含一些其他变量的列表,如视频名称、起点、终点等。 此代码旨在将一个视频放在另一个视频中

这是我的代码:

def video_cut(data, movie1):
    folder,movie2, lista,  end, start  = data
    movie2 = f'../{movie2}'

    clip1 = VideoFileClip(movie1)
    durata = clip1.duration - end
    clip1 = clip1.subclip(0, durata)
    
    audio = f'../Rus_sound/{movie1}'[:-3] + 'mp3'
    clip1 = clip1.set_audio(AudioFileClip(audio).subclip(0, durata))
    
    w = clip1.w
    h = clip1.h
    fps = clip1.fps

    clip2 = VideoFileClip(movie2).resize(height=h, width=w).set_fps(fps)
    
    
    
    lista = [start] + [i*durata for i in lista ] + [durata]
    
    stocked = []
    for i in range(1, len(lista)):
        o = i-1
        clip = clip1.subclip(lista[o], lista[i])
        stocked.append(clip)
        if i != len(lista)-1:
            stocked.append(clip2)
    clip = concatenate_videoclips(stocked, method='compose')

    if os.path.isdir('Nova') == False: #If directory "Nova" is exist -> continue, if not - create
        os.mkdir('Nova')
    #clip.write_videofile(f'Nova/{movie1}') # Saving file in 'Nova' directory, with initially name
    clip.write_videofile(f'Nova/{movie1}'[:-3]+'mp4')

video_cut(data, '01.mkv')
这是我的回溯:



OSError                                   Traceback (most recent call last)
<ipython-input-30-d1f67adfb994> in <module>
----> 1 video_cut(data, '01.mkv')

<ipython-input-28-b707f88639c3> in video_cut(data, movie1)
     32         os.mkdir('Nova')
     33     #clip.write_videofile(f'Nova/{movie1}') # Saving file in 'Nova' directory, with initially name
---> 34     clip.write_videofile(f'Nova/{movie1}'[:-3]+'mp4')

<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/python3.8/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-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/python3.8/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-169> 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/python3.8/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/python3.8/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-161> in write_audiofile(self, filename, fps, nbytes, buffersize, codec, bitrate, ffmpeg_params, write_logfile, verbose, logger)

~/Anaconda3/lib/python3.8/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/python3.8/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-125> in ffmpeg_audiowrite(clip, filename, fps, nbytes, buffersize, codec, bitrate, write_logfile, verbose, ffmpeg_params, logger)

~/Anaconda3/lib/python3.8/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/python3.8/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/python3.8/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-160> in to_soundarray(self, tt, fps, quantize, nbytes, buffersize)

~/Anaconda3/lib/python3.8/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/python3.8/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-127> in get_frame(self, t)

~/Anaconda3/lib/python3.8/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/python3.8/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/python3.8/site-packages/moviepy/audio/AudioClip.py in make_frame(t)
    294             played_parts = [c.is_playing(t) for c in self.clips]
    295 
--> 296             sounds = [c.get_frame(t - c.start)*np.array([part]).T
    297                       for c, part in zip(self.clips, played_parts)
    298                       if (part is not False)]

~/Anaconda3/lib/python3.8/site-packages/moviepy/audio/AudioClip.py in <listcomp>(.0)
    294             played_parts = [c.is_playing(t) for c in self.clips]
    295 
--> 296             sounds = [c.get_frame(t - c.start)*np.array([part]).T
    297                       for c, part in zip(self.clips, played_parts)
    298                       if (part is not False)]

<decorator-gen-127> in get_frame(self, t)

~/Anaconda3/lib/python3.8/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/python3.8/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/python3.8/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/python3.8/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-127> in get_frame(self, t)

~/Anaconda3/lib/python3.8/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/python3.8/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/python3.8/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/python3.8/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-127> in get_frame(self, t)

~/Anaconda3/lib/python3.8/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/python3.8/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/python3.8/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/python3.8/site-packages/moviepy/audio/io/readers.py in get_frame(self, tt)
    168         # Check that the requested time is in the valid range
    169             if not in_time.any():
--> 170                 raise IOError("Error in file %s, "%(self.filename)+
    171                        "Accessing time t=%.02f-%.02f seconds, "%(tt[0], tt[-1])+
    172                        "with clip duration=%d seconds, "%self.duration)

OSError: Error in file ../Rus_sound/01.mp3, Accessing time t=1497.05-1497.09 seconds, with clip duration=1497 seconds, 


chunk: 100%|█████████▉| 34556/34565 [01:53<00:00, 254.57it/s, now=None]

OSError回溯(最近一次调用上次)
在里面
---->1个视频剪辑(数据'01.mkv')
视频剪辑(数据,电影1)
32 os.mkdir('Nova')
33#clip.write#videofile(f'Nova/{movie1}')#将文件保存在'Nova'目录中,初始名称为
--->34剪辑.编写视频文件(f'Nova/{movie1}'[:-3]+'mp4')
写入视频文件(自身、文件名、fps、编解码器、比特率、音频、音频fps、预设、音频字节、音频编解码器、音频比特率、音频大小、临时音频文件、重写音频、删除临时、写入日志文件、冗余、线程、ffmpeg参数、记录器)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py中需要持续时间(f,clip,*a,**k)
52提升值错误(“未设置属性“持续时间”)
53.其他:
--->54返回f(夹子,*a,**k)
55
56
写入视频文件(自身、文件名、fps、编解码器、比特率、音频、音频fps、预设、音频字节、音频编解码器、音频比特率、音频大小、临时音频文件、重写音频、删除临时、写入日志文件、冗余、线程、ffmpeg参数、记录器)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py正在使用默认情况下(f,clip,*a,**k)
133对于k.items()中的(k,v)}
134
-->135返回f(夹子,*新的a,**新的kw)
写入视频文件(自身、文件名、fps、编解码器、比特率、音频、音频fps、预设、音频字节、音频编解码器、音频比特率、音频大小、临时音频文件、重写音频、删除临时、写入日志文件、冗余、线程、ffmpeg参数、记录器)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py在转换为RGB(f,clip,*a,**k)
20如果clip.ismask:
21 clip=clip.to_RGB()
--->22返回f(夹子,*a,**k)
23
24@decorator.decorator
~/Anaconda3/lib/python3.8/site-packages/moviepy/video/VideoClip.py写入视频文件(self、文件名、fps、编解码器、比特率、音频、音频fps、预设、音频字节、音频编解码器、音频比特率、音频大小、临时音频文件、重写音频、删除临时、写入日志文件、冗余、线程、ffmpeg参数、记录器)
291记录器(message=“Moviepy-生成视频%s.%filename)
292如果制作音频:
-->293 self.audio.write_audiofile(音频文件、音频fps、,
294个音频字节,音频大小,
295音频编解码器,比特率=音频比特率,
写入音频文件(自身、文件名、fps、N字节、缓冲区大小、编解码器、比特率、ffmpeg参数、写入日志文件、详细信息、记录器)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py中需要持续时间(f,clip,*a,**k)
52提升值错误(“未设置属性“持续时间”)
53.其他:
--->54返回f(夹子,*a,**k)
55
56
写入音频文件中的~/Anaconda3/lib/python3.8/site-packages/moviepy/audio/AudioClip.py(self、文件名、fps、n字节、缓冲区大小、编解码器、比特率、ffmpeg参数、写入日志文件、详细信息、记录器)
204“写入音频文件中的参数。”)
205
-->206返回ffmpeg_音频写入(自身、文件名、fps、N字节、缓冲区大小、,
207编解码器=编解码器,比特率=比特率,
208 write_logfile=write_logfile,verbose=verbose,
在ffmpeg_音频写入中(剪辑、文件名、fps、N字节、缓冲区大小、编解码器、比特率、写入日志文件、详细信息、ffmpeg_参数、记录器)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py中需要持续时间(f,clip,*a,**k)
52提升值错误(“未设置属性“持续时间”)
53.其他:
--->54返回f(夹子,*a,**k)
55
56
ffmpeg\u audiowrite中的~/Anaconda3/lib/python3.8/site-packages/moviepy/audio/io/ffmpeg\u audiowriter.py(剪辑、文件名、fps、n字节、缓冲区大小、编解码器、比特率、写入日志文件、详细信息、ffmpeg\u参数、记录器)
164 ffmpeg_参数=ffmpeg_参数)
165
-->166用于片段中的块。iter_块(chunksize=buffersize,
167量化=真,
168N字节=N字节,fps=fps,
iter_块中的~/Anaconda3/lib/python3.8/site-packages/moviepy/audio/AudioClip.py(self、chunksize、chunk_duration、fps、quantize、nbytes、logger)
83 assert(大小85)产生自对_soundarray(tt,nbytes=nbytes,quantize=quantize,
86 fps=fps,buffersize=chunksize)
87
in-to_soundarray(self、tt、fps、quantize、nbytes、buffersize)
~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py中需要持续时间(f,clip,*a,**k)
52提升值错误(“未设置属性“持续时间”)
53.其他:
--->54返回f(夹子,*a,**k)
55
56
~/Anaconda3/lib/python3.8/site-packages/moviepy/audio/AudioClip.py输入到声音阵列(self、tt、fps、quantize、nbytes、buffersize)
125#打印tt.max()-tt.min(),tt.min(),tt.max()
126
-->127 snd_数组=self.get_帧(tt)
128
129如果量化:
在get_帧中(self,t)
包装中的~/Anaconda3/lib/python3.8/site-packages/moviepy/decorators.py(f,*a,**kw)
87 new_kw={k:fun(v)如果k在varnames else v中
88表示(k,v),单位为kw.items()}
--->89返回f(*新功率,**新功率)
90返回装饰器。装饰器(包装器)
91
~/Anaconda3/lib/python3.8/si