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