python - pydub AudioSegment.export 正在锁定 smb 共享上的文件。无法删除该文件

标签 python audio ffmpeg processing pydub

尝试使用 pydub 从立体声文件中提取单声道音频时遇到问题。
这是代码:

import wave
import audioop
from pydub import AudioSegment

def cantDeleteLockedFile():

    audiofile = "/Volumes/test/stereotest.wav"
    audiostrip = AudioFileClip(audiofile)

    if audiostrip.nchannels > 1:
        with open(audiofile, "rb") as oaudiofile:
            mono_audios = AudioSegment.from_file(oaudiofile, format="wav")

            # List of AudioSegments, mono files, which can be accessed via [0] and [1]
            mono_audios = mono_audios.split_to_mono()
            audioChannelOne = str(audiofile.rsplit(".", 1)[0]) + "a.wav"

             # This line is locking the stereo file
             mono_left = mono_audios[0].export(audioChannelOne, format="wav")
             # This extracts the mono left track from the stereo track
             # On the same location a file will be created, in this example:
             # "/Volumes/test/stereotesta.wav"

            # This should unlock the file, but doesnt
            mono_left.close()
         
            # When trying to delete the file here, it will fail 
            # without exception raised
            os.remove(audiofile)

           if os.path.exists(audiofile):
              return True

           else:
              return False

  return False
执行此代码后,在我的例子中,它嵌入到 API 微服务系统中,不会退出代码。然后,只要该微服务正在运行,立体声音频文件就会被锁定。该文件不会被删除,函数返回值为“False”。如果您稍后在文件系统上手动导航到该文件并尝试手动删除它,它也会失败。它会先删除它,然后它会神奇地弹回来。
我知道这个问题之前在其他板上讨论过。但是,建议的解决方案不起作用。
引用:https://github.com/jiaaro/pydub/issues/305
要么我完全错过了一些东西。但是,也许有一种解决方法可以强制解锁文件,因此可以将其删除?我没有在网上找到引用资料。
基本上我知道,pydub 正在锁定资源,我无法让它解锁音频段后面的 wav 文件。
很高兴阅读您的反馈和建议。
谢谢!

最佳答案

用于检查立体声文件的 Audiosegment 也需要关闭。
这阻止了存储端的文件。
添加一个简单的:

audiostrip.close()
解决了这个问题。

关于python - pydub AudioSegment.export 正在锁定 smb 共享上的文件。无法删除该文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70202737/

相关文章:

java - 自定义 TextToSpeechService 中的错误突出显示

ffmpeg - 如何在ffmpeg中添加时间戳作为生成的图像文件名的一部分

python - 如何阻止qt应用程序卡住主程序?

python - 将 abc.abstractmethod 与其他装饰器相结合

ios - 广告后,声音在游戏中消失

python - 如何使用 PyAudio 选择特定的输入设备

c++ - CentOS中音频文件ds2格式转换为wav

ffmpeg - ffmpegpalettgen rgb565可能吗?

python - 在两个值之间切换变量的大多数 pythonic 方法

python - 如何防止 Django REST API CharFields 中的 XSS 攻击?