您的位置:首页 > 编程语言 > Python开发

< python音频库:Windows下pydub安装配置、过程出现的问题及常用API >

2020-01-04 23:35 2236 查看

< python音频库:Windows下pydub安装配置、过程出现的问题及常用API >

背景

  • 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现。其中倒放与播放部分使用了pydub这个音频库,十分快捷方便,但是它完整一套的配置让我还是踩了几个坑。特将其配置过程记录于此,方便大家。

  • Windows10
    系统

  • < Pydub in Github >

安装
Pydub

  • Anaconda
    :打开
    Anaconda prompt
    activate
    切换至工作环境下,键入
    pip install pydub

  • Pycharm
    setting
    project
    ,将
    pydub
    安装进
    pip
    环境

安装
FFmpeg
(或选择
libav

  1. 下载
    FFmpeg

      < FFmpeg官网 > :找到对应的系统版本下载。

    • 将压缩包解压到任意目录。

    • 将安装安装目录下的

      bin
      文件夹添加到系统的
      Path
      环境变量中。

    • 如果添加环境变量成功后,打开

      cmd
      ,键入
      ffmpeg -version
      ,就可以看到版本信息。

  2. 下载
    FFmpeg

      除了按完成以上下载之外,还需要在

      python
      中导入
      FFmpeg

    • 同上

      Pydub
      包导入 -
      pip install FFmpeg

安装
Pyaudio

  • 可以仅使用纯
    Pydub
    打开或保存
    WAV
    文件。为了打开或保存非
    WAV
    文件——比如
    MP3
    ——你需要
    ffmepg
    或是
    libav
    。而如果需要播放音频,则需要安装以下包:

    simpleaudio

  • pyaudio

  • ffplay
    (通常随
    ffmpeg
    安装)

  • avplay
    ((通常随
    libav
    安装)

  • 官网是强烈推荐安装

    simpleaudio
    ,而我选择的是
    pyaudio
    ,因为之后程序的其他部分还需要用到,所以就直接选择了
    pyaudio

  • 包安装同上

    Pydub
    -
    pip install pyaudio

  • 至此安装配置工作完成,可试验以下代码看是否能运行。
  • from pydub import AudioSegment
    from pydub.playback import play
    
    sound = AudioSegment.from_file("0.mp3", "mp3")
    play(sound)

    问题:[Errno 13] Permission denied

    • 安装了
      pydub
      ffmpeg
      ,但是缺少播放音频的包,安装后不再显示。

    问题 [WinError 2] 系统找不到指定的文件

    • 安装了
      ffmpeg
      其中的一项,还缺少另外一项,安装后不再显示。

    常用API

    打开一个XXX类型文件:

    mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp3", "mp3")
    wma_version = AudioSegment.from_file("never_gonna_give_you_up.wav", "wav")
    aac_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")

    对音频段切片

    # pydub做任何操作的时间尺度都是毫秒
    ten_seconds = 10 * 1000
    
    first_10_seconds = song[:ten_seconds]
    last_5_seconds = song[-5000:]

    连接音频段

    without_the_middle = beginning + end

    让开头更响和让结束更弱

    # 声音增益6dB
    beginning = first_10_seconds + 6
    
    # 声音减弱3dB
    end = last_5_seconds - 3

    重复

    # 将片段重复两遍
    do_it_over = with_style * 2

    倒放

    # 读取想要倒放的音频文件
    ted = AudioSegment.from_file("ted.mp3")
    # 将音频倒放赋给变量 backwards
    backwards = ted.reverse()

    保存结果 / 音频格式转换

    awesome.export("mashup.mp3", format="mp3")

    批量处理音频

    from pydub import AudioSegment
    
    # i 从 0 到 9 取值
    for i in range(10):
    # 按顺序读取 00i.m4a 文件
    temp = AudioSegment.from_file(f"00{i}.m4a")
    # 将 00i.m4a 转换为 答案00i.mp3
    temp.export(f"答案00{i}.mp3")
    # 将音频倒放
    backplay = temp.reverse()
    # 将倒放音频存为 音谜00i.mp3
    backplay.export(f"音谜00{i}.mp3")
    # 打印个 done 提示完成
    print("done")

    举个例子:

    from glob import glob
    from pydub import AudioSegment
    
    playlist_songs = [AudioSegment.from_mp3(mp3_file) for mp3_file in glob("*.mp3")]
    
    first_song = playlist_songs.pop(0)
    
    # 让我们只包含第一首歌的前30秒 (切片以毫秒为单位)
    beginning_of_song = first_song[:30*1000]
    
    playlist = beginning_of_song
    for song in playlist_songs:
    # 我们不想让结尾听起来像是突然停止,所以我们给它加上10秒的淡化
    playlist = playlist.append(song, crossfade=(10 * 1000))
    
    # 让我们给最后一首歌的结尾加上淡出
    playlist = playlist.fade_out(30)
    
    # 唔……我还想知道它有多长( len(audio_segment)返回值同样是以毫秒计的 )
    playlist_length = len(playlist) / (1000*60)
    
    # 现在保存下来!
    out_f = open("%s_minute_playlist.mp3" % playlist_length, 'wb')
    
    playlist.export(out_f, format='mp3')
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐