pythonaudioffmpeglibx264moviepy

Why does moviepy complain about bitrate while generating audiofile?


I have just try to use moviepy library for the first time. Generation of movies from numpy arrays was really simple, intuitive and worked out of box. This is what I tried:

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)

Then I wanted to use moviepy to generate sound. In theory it should work in a very similar way. Here is what I tried:

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')

However, I got an error message:

[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.

Does anybody know what this error means and how this problem can be resolved?


Solution

  • You cannot write a soundfile with a mp4 extension. Instead, use ".mp3", ".wav", ".ogg", etc.