Zulko / moviepy

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

set_duration not working; ValueError: Attribute 'duration' not set #1983

Closed keisanng closed 1 year ago

keisanng commented 1 year ago

Expected Behavior

I expect for the duration of watermark to be set to video.duration using the set_duration function.

Actual Behavior

I get the error "ValueError: Attribute 'duration' not set" and watermark duration prints as None.

Steps to Reproduce the Problem

# Video I
video = moviepy.concatenate_videoclips(resolved_video_clips, method="compose")
video.resize((1280, 720))

print(video.duration)

# Watermark
if (len(config["generation"]["watermark"]) > 0):
  watermark = moviepy.TextClip(config["generation"]["watermark"], color="white", font="times", fontsize=120)
  watermark.set_position((0.5, 0.8), relative=True) # 50%w 80%h
  watermark.set_duration(video.duration)
  video = moviepy.CompositeVideoClip([video, watermark])

# Video II
video.write_videofile(os.path.join("output", "videos", f"{config['metadata']['title']}.{config['metadata']['format']}"))

resolved_video_clips is a list ([]) of multiple VideoFileClip; config is a JSON file.

Note: watermark.duration = video.duration doesn't work either.

Specifications

keisanng commented 1 year ago

Fixed by assigning watermark.

watermark = watermark.set_position(...)
watermark = watermark.set_duration(...)