使用python

时间:2019-02-20 17:41:56

标签: python audio automation pydub

我正在寻找一种使用python自动化外部程序中任务的方法。

我有AAC格式的大型音频文件。我需要将它们转换为mp3,然后进行放大(避免失真)。

我用pydub librarie编写了一个程序,可以很好地处理小文件,但是我的文件太大(超过2hs或200mb),并且内存用完了(因为lib将完整文件存储在RAM中,我认为)。我无法将文件拆分为多个块,因为由于先前的原因我无法再次合并它们,因此我需要一个文件。

因此,我想编写一个程序来打开另一个程序,以将文件转换为mp3(mediahuman音频转换器),然后使用另一个程序(WavePad音频编辑器)放大转换后的文件,但是我不知道是否这可能。

目前,我是手动执行此操作,但是这需要花费很长时间,并且点击次数少于10次(在整个过程中分布),这非常乏味。

我离开了我编写的程序。我转录了它以删除一些与此过程不相关且不相关的功能,再加上将注释,变量和其他内容翻译成英语,因此可能会有一些错误,但是原始程序运行良好:

import glob
import os
from pydub import AudioSegment

#convert to mp3 128 bits
sound = AudioSegment.from_file("input-file.aac")
sound.export("output-file.mp3", format="mp3", bitrate="128k")

#sound.max_dBFS shows how far below the limit the highest sample is (in dB)
sound = AudioSegment.from_file("output.mp3", format="mp3")
max_gain_without_distortion = -1 * sound.max_dBFS

#increase volume by "max_gain_without_distortion" dB
from pydub.playback import play
song = AudioSegment.from_mp3("output-file.mp3")
louder_song = song + max_gain_without_distortion

#save louder song
louder_song.export("output.mp3", format='mp3')

PC规格:/// 操作系统:Windows 10 Pro 64位/// 内存:4GB /// CPU:双核3ghz /// PYTHON版本:3.7.1 /// Pydub版本:v0.23.1-0-g46782a9 /// ffmpeg / avlib版本:“内部版本:ffmpeg-20190219-ff03418-win32-static” ///

1 个答案:

答案 0 :(得分:3)

正如评论中所同意的那样,作为解决方案,我将建议使用命令行工具FFmpeg。这是您需要的命令:

ffmpeg -i input-file.aac -b:v 128k -filter:a loudnorm output.mp3

使用loudnorm。您也可以按照文档中的说明直接应用增益,但是效果不佳。规范化可以通过多种方式完成,我建议您阅读this post

通过与例如find . -name '*.wav' -type f可以轻松在目录树中查找和转换所有文件。

如果您打算使用Python,可以检查Python bindings。基础:

import ffmpeg
ffmpeg.input('stereo.aac').output('mono.mp3').run()

最初,我打算使用sox提出建议: Sound eXchange,这是瑞士军方的音频操纵工具。它不是Python,尽管有Python bindings pysox 。但是,事实证明它不支持aac格式(仍然有数十种其他格式)。我认为无论如何要提一下它可能很有趣,因为可以先使用 ffmpeg 将其转换为更流行的格式,然后将结果传送到 sox 。后者具有更多用于修改音频流的选项。

将wav转换为mp3并重新采样为128kbit:

sox -r 128k input-file.wav output-file.mp3

OP要求“将音量增加max_gain_without_distortion dB”,为此,我们可以使用gainnorm,如docs中所述:

sox -r 128k input-file.wav output-file.mp3 gain −n -3

在文档之后, -n选项将音频归一化为0dB FSD;通常与负增益dB结合使用,以使音频被归一化到低于0dB的给定电平。

sox −−norm -r 128k input-file.wav output-file.mp3