2015-02-21 8 views
1

Я только что попробовал использовать библиотеку 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

* «Недопустимый тип кодировщика» libx264 «Ошибка» кажется не связанной с «битрейтом». У вас установлен этот кодек? вы попробовали расширение '.mp3' (для создания аудиофайла)? – jfs

ответ

2

Вы не можете записать звуковой файл с расширением mp4. Вместо этого используйте «.mp3», «.wav», «.ogg» и т. Д.

0

Очевидно, решение Зулько верное, но я отвечаю на фактический вопрос: «Почему кипения жалуются на битрейт?» заключается в том, что строка 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) и установите битрейт в любое удобное для вас время.

 Смежные вопросы

  • Нет связанных вопросов^_^