使用完文件后,我试图删除文件,但始终出现错误...
错误:
PermissionError:[WinError 32]该进程无法访问文件,因为该文件正在被另一个进程使用:'0.mp4'
我尝试关闭对象,但是它不起作用...
import os
from moviepy.editor import VideoFileClip, concatenate_videoclips
DEFAULT_HEIGHT = 720
DEFAULT_WIDTH = 1280
clip_names = ["0.mp4", "1.mp4"]
clips = []
for name in clip_names:
clips.append(VideoFileClip(name).resize(width=DEFAULT_WIDTH,height=DEFAULT_HEIGHT))
final_clip = concatenate_videoclips(clips)
final_clip.write_videofile("video.mp4")
for clip in clips:
clip.__del__()
for name in clip_names:
os.remove(name)
我想使用os.remove删除文件...
答案 0 :(得分:1)
您只是尝试简单地关闭剪辑吗?
for clip in clips:
clip.close()
来自来源here。
或者,如果您想在发生错误的情况下彻底执行此操作,请使用with
上下文:
import contextlib
with contextlib.ExitStack() as stack:
clips = []
for name in clip_names:
clip = VideoFileClip(name)
stack.enter_context(contextlib.closing(clip))
clips.append(clip.resize(width=DEFAULT_WIDTH,height=DEFAULT_HEIGHT))
final_clip = concatenate_videoclips(clips)
final_clip.write_videofile("video.mp4")
# exiting the `with` block released the clips
for name in clip_names:
os.remove(name)
此方法使用ExitStack
来跟踪剪辑。当程序退出with
块时,将退出传递到enter_context
的所有上下文,从而释放所有剪辑。