Search code examples
pythonmoviepy

moviepy clip merging with python


Iam trying to put each clip inside a file into one clip using moviepy library

from moviepy.editor import VideoFileClip, concatenate_videoclips
import os
import cv2

clips = []
    for filename in os.listdir(r'clips//'):
        clips.append(filename)

print(clips)

finalVideo = concatenate_videoclips(f'clips//{clips}')
finalVideo.write_videofile('finalVideo.mp4')

However, i get this error:

File "C:/Users/myalt/OneDrive/Desktop/pythonProject2/main.py", line 11, in <module>
    finalVideo = concatenate_videoclips(f'clips//{clips}')
  File "C:\Users\myalt\OneDrive\Desktop\pythonProject2\venv\lib\site-packages\moviepy\video\compositing\concatenate.py", line 71, in concatenate_videoclips
    tt = np.cumsum([0] + [c.duration for c in clips])
  File "C:\Users\myalt\OneDrive\Desktop\pythonProject2\venv\lib\site-packages\moviepy\video\compositing\concatenate.py", line 71, in <listcomp>
    tt = np.cumsum([0] + [c.duration for c in clips])
AttributeError: 'str' object has no attribute 'duration'

Solution

  • What about something like:

    clips = []
    clipPaths = [] #If you want to store the paths as well
    for filename in os.listdir(r'clips//'):
        #clips.append(filename)
        clip = VideoFileClip(filename)
        clips.append(clip)
        clipPaths.append(filename)
    

    https://zulko.github.io/moviepy/examples/quick_recipes.html

    https://zulko.github.io/moviepy/getting_started/compositing.html

    (May have to tweak the path)