【发布时间】:2017-08-23 15:42:28
【问题描述】:
我有一个函数可以在临时文件夹中查找 mp4 视频,将其转换为单独文件夹中的 mp3,称为音乐,然后从临时文件夹中删除 mp4。它看起来像这样:
import imageio
imageio.plugins.ffmpeg.download()
import moviepy.editor as mp
def convert_mp4_to_mp3():
video_file = os.listdir(os.getcwd() + '//temp')[0]
audio_file = video_file.replace('mp4','mp3')
clip = mp.VideoFileClip(os.getcwd() + '//temp//' + video_file)
clip.audio.write_audiofile(os.getcwd() + '//music//' + audio_file)
os.system("taskkill /f /im ffmpeg.win32.exe*32")
os.remove(os.getcwd() + '//temp//' + video_file)
该函数成功完成了从mp4到mp3的转换,但是当我尝试删除文件时,出现以下错误:
PermissionError: [WinError 32] The process cannot access the file because it
is being used by another process
在尝试手动删除文件时,我发现这是因为“ffmpeg.win32.exe”仍在文件打开的情况下运行。在我终止该进程之前,我无法手动删除它。
我尝试执行倒数第二行 (os.system("taskkill /f /im ffmpeg.win32.exe*32") 来终止进程,但我仍然遇到同样的错误。
所以我的问题是,一旦我知道我已经完成了它,是否有一种简单的方法可以杀死 ffmpeg,或者是否有一种解决方法可以通过另一个进程以某种方式杀死它?我在 Windows 7 电脑上使用 python3.6 工作。提前感谢您的帮助!
【问题讨论】:
-
尝试调用
clip.close()而不是杀死ffmpeg。 -
我得到一个错误“'VideoFileClip'对象没有属性'close'”
-
这可以是您的代码的真实副本,其中包含双斜杠('//')吗?
-
是的,上面是我写的确切代码。我需要使用双斜杠,否则 python 会因为某种原因而感到困惑......
标签: python video ffmpeg python-3.6