我想用 python 进行基本的音频混合。
举个例子:我想将两个mp3文件添加到一起并返回一个mp3文件。 另一个例子:我想将一个 mp3 文件的前十秒添加到另一个 mp3 文件的开头。
完成这些任务的最佳方法是什么?我想使用内置的Python函数,比如audioop,但找不到任何好的教程或示例代码来使用内置函数。
我正在查看文档,但我很困惑,不知道如何做这样的事情。我什至不确定 python 库是否像 mp3 那样。 我看过的大部分内容似乎都涉及 WAV 文件。 所以,如果是这种情况,我想后续问题是有没有一种简单的方法可以将 mp3 转换为 WAV 进行操作并再次转换回来?
您可以使用 pydub 轻松完成此操作:
from pydub import AudioSegment
sound1 = AudioSegment.from_mp3("/path/to/file1.mp3")
sound2 = AudioSegment.from_mp3("/path/to/file1.mp3")
# mix sound2 with sound1, starting at 5000ms into sound1)
output = sound1.overlay(sound2, position=5000)
# save the result
output.export("mixed_sounds.mp3", format="mp3")
您可以查看 python audiotools 项目中的一些代码。 它是使用通用 python 包的命令行实用程序的集合。 音频工具 (
trackcat
) 中包含一个实用程序,可以连接两个或多个音轨;另一个 (tracksplit
) 可以分割音轨(使用 .cue 文件)。 这些以及许多其他包含的实用程序可以处理各种编码的音频文件,包括 mp3。
您可以使用cutcutcodec来连接和混合不同的音频通道。 这是示例 1 的解决方案:
from cutcutcodec.core.io import read, write
from cutcutcodec.core.filter.audio.equation import FilterAudioEquation
with read("file1.mp3") as cont1, read("file2.mp3") as cont2:
stream1, stream2 = cont1.out_streams[0], cont2.out_streams[0]
stream = FilterAudioEquation([stream1, stream2], "(fl_0+fl_1)/2", "(fr_0+fr_1)/2").out_streams[0]
write([stream], "mix.mp3", [{"encodec": "libmp3lame", "rate": 44100}])
对于示例 2,您可以使用过滤器 FilterAudioSubclip 和 FilterAudioCat。