0

I have around 245 .webm files in my directory. I want to merge all of those 245 files into one single file called output.webm. I am using python's 'moviepy' module to achieve this.

This is what I have done so far :

import os
from moviepy.editor import *

audio_folder='path/to/directory'

audio_files = [audio_folder+'/'+img for img in os.listdir(audio_folder) if img.endswith(".webm")]

print(audio_files)
audio = concatenate_audioclips(audio_files)
audio.write_audiofile('output.webm')

I am getting the following error while doing this :

Traceback (most recent call last):
File "demo.py", line 17, in <module>
 audio = concatenate_audioclips(audio_files)
File "C:\Users\abc\AppData\Local\Programs\Python\Python38-32\lib\site- 
 packages\moviepy\audio\AudioClip.py", line 315, in concatenate_audioclips
durations = [c.duration for c in clips]
File "C:\Users\abc\AppData\Local\Programs\Python\Python38-32\lib\site- 
 packages\moviepy\audio\AudioClip.py", line 315, in <listcomp>
 durations = [c.duration for c in clips]
AttributeError: 'str' object has no attribute 'duration'

Where am I going wrong?

S M
  • 111
  • 11
  • `audio_files` is a list of strings. `concatenate_audioclips` expects a list of `AudioClip` objects. – Paul M. Aug 24 '20 at 15:25
  • @PaulM. Thanks for your suggestion. It worked. I am answering my question below. – S M Aug 25 '20 at 05:52

1 Answers1

1

As Paul M suggested above, I was passing list of strings to concatenate_audioclips function rather than list of AudioClip Objects. This is what I did to solve the problem.

audio_folder='path/to/directory'

audio_files = [audio_folder+'/'+img for img in os.listdir(audio_folder) if img.endswith(".webm")]

print(audio_files)

audios = []
for audio in audio_files :
    audios.append(AudioFileClip(audio))

audioClips = concatenate_audioclips([audio for audio in audios])
audioClips.write_audiofile('output.webm')
S M
  • 111
  • 11