代码之家  ›  专栏  ›  技术社区  ›  reckoner

python模块更改MP3文件以更快地播放?

  •  0
  • reckoner  · 技术社区  · 14 年前

    我有许多MP3文件,其中包含讲课,讲课者讲话非常慢,我想更改MP3文件,使播放速度大约是正常速度的1.5倍。

    有人能为此推荐一个好的python库吗?顺便说一下,我正在Windows上运行python 2.6。

    事先谢谢。

    3 回复  |  直到 6 年前
        1
  •  1
  •   synthesizerpatel    14 年前

    pymedia 包括一个重新编码的audio.py示例,允许使用任意输入和输出格式 here . 当然,这也需要安装pymedia。

    注意,正如Nick T所指出的,如果你只是改变采样率而不重新采样,你会得到高音调的“快速”音频,所以你会想使用 time-stretching 结合改变比特率。

        2
  •  1
  •   Jiaaro    10 年前

    我写了一个图书馆, pydub 主要用于操纵音频。

    我创造了一个 experimental time-stretching algorithm 如果你有兴趣看看这些东西是如何工作的。

    本质上,你想扔掉一部分数据,但你不能只是更快地回放波形,因为这样所有的波形都会变得高音调(如syntherpatel提到的那样)。相反,你想扔掉数据块(20赫兹是人类能听到的最低频率,所以50毫秒的数据块不会引起可听见的频率变化,尽管还有其他的伪影)。

    PS-我得到50毫秒,就像这样:

    20 Hz == 1 second per 20 cycles
    
    or
    
    1000 ms per 20 cycles
    
    or
    
    1000ms / 20Hz == 50ms per cycle
    
        3
  •  0
  •   itsMe    6 年前

    你可以试一试 _spawn 模块在 audio_segment.py 菩提树的下面是一个示例代码:

    from pydub import AudioSegment
    import os
    
    def speed_swifter(sound, speed=1.0):
        return sound_with_altered_frame_rate = sound._spawn(sound.raw_data, overrides={"frame_rate": int(sound.frame_rate * speed)})
    
    in_path = 'your/path/of/input_file/hello.mp3'
    ex_path = 'your/path/of/output_file/hello.mp3'
    sound = AudioSegment.from_file(in_path)    
    
    # generate a slower audio for example
    slower_sound = speed_change(sound, 0.5)
    
    slower_sound.export(os.path.join(ex_path, 'slower.mp3'), format="mp3")