【问题标题】:Can pydub don't lead to memory error when audio segment big file?音频片段大文件时pydub不会导致内存错误吗?
【发布时间】:2016-02-15 00:13:24
【问题描述】:

每次文件很大(电影的长度)时,我都会遇到内存错误。有没有办法处理大文件的音频片段?

sound = AudioSegment.from_mp3("vanilla_sky.mp3")
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 423, in from_mp3
return cls.from_file(file, 'mp3')
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 412, in from_file
obj = cls._from_safe_wav(output)
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 445, in _from_safe_wav
return cls(data=file)
File "D:\Python27\lib\site-packages\pydub\audio_segment.py", line 130, in __init__
data = data if isinstance(data, basestring) else data.read()
MemoryError

【问题讨论】:

    标签: python audio segment pydub


    【解决方案1】:

    简而言之,不——一个 pydub AudioSegment 代表音频本身(并包含音频数据)。

    关于添加AudioSegment 的流媒体版本以帮助解决这些内存问题的一些讨论,但这项工作尚未完成(尽管我不知道有谁特别计划解决这个问题)。

    解决方法

    如果您只想转换音频,您可以turn on logging 并复制您需要进行转换的特定 ffmpeg 命令。日志输出将显示一个子进程调用,您可以立即在 python 代码中使用它:

    >>> import logging
    
    >>> l = logging.getLogger("pydub.converter")
    >>> l.setLevel(logging.DEBUG)
    >>> l.addHandler(logging.StreamHandler())
    
    >>> AudioSegment.from_file("./vanilla_sky.mp3")
    subprocess.call(['ffmpeg', '-y', '-i', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpeZTgMy', '-vn', '-f', 'wav', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpK5aLcZ'])
    

    (第一个/var/…文件是输入文件的副本,第二个是输出文件,转换完成后加载到AudioSegment中)

    【讨论】:

    • 我通过使用 64 位 python 解释器解决了这个错误......无论如何,谢谢你的回答。
    • @LeoHsieh 很有趣……我没有考虑过这个潜在的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多