Zulko / moviepy

Video editing with Python
https://zulko.github.io/moviepy/
MIT License
12.1k stars 1.51k forks source link

AudioFileClip doesn't support np.ndarray #2027

Closed wizardforcel closed 4 months ago

wizardforcel commented 10 months ago
            wav_arr, _ = librosa.load(BytesIO(a['audio']))
            clip = AudioFileClip(wav_arr).set_start(st)
Traceback (most recent call last):
  File "D:\Python310\Scripts\auto-video-script.py", line 33, in <module>
    sys.exit(load_entry_point('BookerAutoVideo==2023.5.30.0', 'console_scripts', 'auto-video')())
  File "D:\Python310\lib\site-packages\bookerautovideo-2023.5.30.0-py3.10.egg\BookerAutoVideo\__main__.py", line 66, in main
    args.func(args)
  File "D:\Python310\lib\site-packages\bookerautovideo-2023.5.30.0-py3.10.egg\BookerAutoVideo\autovideo.py", line 242, in autovideo
    video = make_video(frames)
  File "D:\Python310\lib\site-packages\bookerautovideo-2023.5.30.0-py3.10.egg\BookerAutoVideo\autovideo.py", line 182, in make_video
    clip = AudioFileClip(wav_arr).set_start(st)
  File "D:\Python310\lib\site-packages\moviepy\audio\io\AudioFileClip.py", line 70, in __init__
    self.reader = FFMPEG_AudioReader(filename, fps=fps, nbytes=nbytes,
  File "D:\Python310\lib\site-packages\moviepy\audio\io\readers.py", line 51, in __init__
    infos = ffmpeg_parse_infos(filename)
  File "D:\Python310\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 244, in ffmpeg_parse_infos
    is_GIF = filename.endswith('.gif')
AttributeError: 'numpy.ndarray' object has no attribute 'endswith'
bzczb commented 4 months ago

You can use AudioArrayClip.

import moviepy.audio.AudioClip as audio

wav_arr, _ = librosa.load(BytesIO(a['audio']))
clip = audio.AudioArrayClip(wav_arr)

Warning!! If it's not mono audio, you'll have to reshape the array. moviepy works with a duration-long array of multichannel samples, but librosa works with a channels-long array of duration-long tracks. You can use numpy.swapaxes(wav_arr, 0, 1)