Zulko / moviepy

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

CompositeAudioClip close() method doesn't close opened handles #2045

Open busbaby opened 9 months ago

busbaby commented 9 months ago

Expected Behavior

CompositeAudioClip close() method should close any/all opened handles owned by self.

Actual Behavior

Calling close() on CompositeAudioClip object leaves opened handles.

Steps to Reproduce the Problem

from moviepy.audio.AudioClip import CompositeAudioClip
from moviepy.audio.io.AudioFileClip import AudioFileClip
import sys
import shutil
import uuid
import os

# Usage: python foo.py sample.wav
# https://download.samplelib.com/wav/sample-9s.wav <-- sample file if needed
fileName = sys.argv[1]
dirName = uuid.uuid4().hex
copyNames = [os.path.join(dirName, f"{x}.wav") for x in list("abc")]
# Copy sample.wav into temp directory as a.wav, b.wav, c.wav
os.makedirs(dirName, exist_ok=True)
[shutil.copy(fileName, x) for x in copyNames]
# Create CompositeAudioClip from files in temp directory
audioClip = CompositeAudioClip([AudioFileClip(x) for x in copyNames])
# Close CompositeAudioClip expected to close any opened handles
audioClip.close()
# Unable to delete files since audioClips has opened handles
shutil.rmtree(dirName)

Specifications