如何在 pydub 中获得相同的输入和输出文件比特率?

Posted

技术标签:

【中文标题】如何在 pydub 中获得相同的输入和输出文件比特率?【英文标题】:How can I get the same bitrate of input and output file in pydub? 【发布时间】:2015-11-17 01:38:04 【问题描述】:

我用 pydub 输出了一个文件(把文件切成更短的文件),一切都很好,但是比特率从 256k 变成了 124k(为什么我会得到这个数字而不是 128k?)。我知道 Audiosegment 有一个设置比特率的参数,但我只想要相同的比特率,而不是每次手动设置。有什么办法可以解决这个问题?

【问题讨论】:

@Jiaaro 你能帮我解决这个问题吗?谢谢~ 【参考方案1】:

这主要与 ffmpeg/avlib 有关,但您可以将标志传递给 AudioSegment().export() method 以指定您想要的比特率:

from pydub import AudioSegment
from pydub.utils import mediainfo

source_file = "/path/to/sound.mp3"

original_bitrate = mediainfo(source_file)['bit_rate']
sound = AudioSegment.from_mp3(source_file)

sound.export("/path/to/output.mp3", format="mp3", bitrate=original_bitrate)

【讨论】:

我知道你提供的api可以导出你想要的比特率,但是如果我不知道输入文件的比特率,我不知道我应该给出什么比特率。我只希望输入和输出文件的比特率相同,而不是给它一个特定的值。【参考方案2】:

我无法通过mediainfo 对象使用上面的示例。我刚刚找到了计算 WAV 文件比特率的方法here 并使用了它。

将它翻译成 python 和 pydub,并假设 pydub 对象被称为 wav 你会得到: bitrate = str((wav.frame_rate * wav.frame_width * 8 * wav.channels) / 1000)

然后您可以将其传递给导出功能,而无需手动设置。希望对你有帮助:)

【讨论】:

以上是关于如何在 pydub 中获得相同的输入和输出文件比特率?的主要内容,如果未能解决你的问题,请参考以下文章

Pydub 导出错误 - 手动选择编码器

如何使用pydub在静音结束时拆分音频文件而不删除静音?

Python - 如何从频谱图输出中获得相同数量的行?

使用 PyDub 删除波形文件开头和结尾的静音

Python pydub音频处理

到 Librosa 的 AudioSegment