【Python】pydub按一定比特率、采样率压缩音频文件

2022-10-18 14:35:24

使用Python第三方库pydub按一定bitrate,frame_rate压缩音频文件

安装pydub

pip install pydub

注: pydub支持wav格式音频读取,本文处理的是MP3格式,所以需要安装ffmpeg.

Linux下安装ffmpeg

sudo apt install ffmpeg

读取、压缩MP3格式文件

from pydubimport AudioSegment# 音频文件路径
path="file's path"# 读取音频文件,设置采样率<default=44100>
song= AudioSegment.from_mp3(path).set_frame_rate(22050)# 按32k的bitrate导出文件到指定路径,这里是直接覆盖原文件
song.export(path,format='mp3', bitrate='32k')

扩展

"""
pydub提供了对mp3, wav, ogg, flv等格式的音频文件的支持,
对应有from_mp3, from_wav, from_ogg, from_flv等Classmethod;
支持设置sample_width, frame_rate, channels,
值得注意的是在AudioSegment初始化时,不可设置单个特征值,否则会报以下错误:
pydub.exceptions.MissingAudioParameter: Either all audio parameters or no parameter must be specified
对应的提供了设置单个特征值的方法:set_frame_rate, set_sample_width, set_channels;
"""# pydub的源码相对简单, 下面是此次运用的两个方法的源代码:defexport(self, out_f=None,format='mp3', codec=None, bitrate=None,
 			parameters=None, tags=None, id3v2_version='4', cover=None):"""
        Export an AudioSegment to a file with given options

        out_f (string):
            Path to destination audio file. Also accepts os.PathLike objects on
            python >= 3.6

        format (string)
            Format for destination audio file.
            ('mp3', 'wav', 'raw', 'ogg' or other ffmpeg/avconv supported files)

        codec (string)
            Codec used to encoding for the destination.

        bitrate (string)
            Bitrate used when encoding destination file. (64, 92, 128, 256, 312k...)
            Each codec accepts different bitrate arguments so take a look at the
            ffmpeg documentation for details (bitrate usually shown as -b, -ba or
            -a:b).

        parameters (string)
            Aditional ffmpeg/avconv parameters

        tags (dict)
            Set metadata information to destination files
            usually used as tags. ({title='Song Title', artist='Song Artist'})

        id3v2_version (string)
            Set ID3v2 version for tags. (default: '4')

        cover (file)
            Set cover for audio file from image file. (png or jpg)
        """passdefset_frame_rate(self, frame_rate):# default: frame_rate=44100if frame_rate== self.frame_rate:return selfif self._data:
            converted, _= audioop.ratecv(self._data, self.sample_width,
                                          self.channels, self.frame_rate,
                                          frame_rate,None)else:
            converted= self._datareturn self._spawn(data=converted,
                           overrides={'frame_rate': frame_rate})

pydub对音频文件的处理是是磁盘IO操作,耗时较长,在web应用中建议做异步后台处理,笔者使用的是django框架做后台开发, django提供有django-rq和django_celery支持异步操作,关于celery和django_rq的使用在笔者其他文章中有所介绍。

  • 作者:Zeokee
  • 原文链接:https://blog.csdn.net/qq_41902687/article/details/83997603
    更新时间:2022-10-18 14:35:24