我第一次尝试使用moviepy
库。从numpy
阵列生成电影非常简单,直观且开箱即用。这就是我试过的:
from moviepy.editor import VideoClip
import numpy as np
def make_frame(t):
val = int(255.0*(t/3.0))
ls = []
for height in range(100):
row = []
for width in range(300):
row.append([val,0,0])
ls.append(row)
frame = np.array(ls)
return frame
animation = VideoClip(make_frame, duration = 3)
animation.write_gif('first_try.gif', fps=24)
animation.write_videofile('first_try.mp4', fps=24)
然后我想用moviepy
来产生声音。理论上它应该以非常相似的方式工作。这是我试过的:
from moviepy.editor import AudioClip
import numpy as np
make_frame = lambda t : 2*[ np.sin(404 * 2 * np.pi * t) ]
clip = AudioClip(make_frame, duration=5)
clip.write_audiofile('sound.mp4')
但是,我收到一条错误消息:
[MoviePy] Writing audio in sound.mp4
|----------| 0/111 0% [elapsed: 00:00 left: ?, ? iters/sec]Traceback (most recent call last):
File "sound.py", line 9, in <module>
clip.write_audiofile('sound.mp4')
File "<string>", line 2, in write_audiofile
File "/usr/local/lib/python2.7/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, *a, **k)
File "/usr/local/lib/python2.7/dist-packages/moviepy/audio/AudioClip.py", line 204, in write_audiofile
verbose=verbose, ffmpeg_params=ffmpeg_params)
File "<string>", line 2, in ffmpeg_audiowrite
File "/usr/local/lib/python2.7/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, *a, **k)
File "/usr/local/lib/python2.7/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 162, in ffmpeg_audiowrite
writer.write_frames(chunk)
File "/usr/local/lib/python2.7/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 122, in write_frames
raise IOError(error)
IOError: [Errno 32] Broken pipe
MoviePy error: FFMPEG encountered the following error while writing file sound.mp4:
Invalid encoder type 'libx264'
The audio export failed, possily because the bitrate you specified was two high or too low for the video codec.
是否有人知道此错误的含义以及如何解决此问题?
答案 0 :(得分:2)
您无法编写具有mp4扩展名的声音文件。相反,使用“.mp3”,“。wav”,“。ogg”等
答案 1 :(得分:0)
显然Zulko的解决方案是正确的,但我回答了实际的问题,&#39;为什么moviepy会抱怨比特率?&#39;是The audio/video export failed, possily because the bitrate you specified was two high or too low for the video codec.
行是大多数失败的导出尝试后打印的通用行。这很少是实际的解决方案。
如果您认为可能,请拨打clip.write_videofile("output.mp4", bitrate=500)
并将比特率设置为您想要的任何内容。