[英]Automate tasks with python
我正在尋找一種方法來使用python自動執行外部程序中的任務。
我有AAC格式的大型音頻文件。 我需要將它們轉換為mp3,然后放大它們(避免失真)。
我用pydub librarie編寫了一個程序,它可以很好地處理小文件,但我的文件太大(超過2小時或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位/// RAM:4gb /// CPU:dualcore 3ghz /// PYTHON VERSION:3.7.1 /// Pydub版本:v0.23.1-0-g46782a9 // / ffmpeg / avlib版本:“Build:ffmpeg-20190219-ff03418-win32-static”///
正如評論中所商定的那樣,作為一種解決方案,我將建議使用命令行工具: FFmpeg 。 這是您需要的命令:
ffmpeg -i input-file.aac -b:v 128k -filter:a loudnorm output.mp3
使用loudnorm 。 您也可以按照文檔中的說明直接應用收益,但是應該會得到較差的結果。 標准化可以通過多種方式完成,我建議閱讀這篇文章 。
通過將其與例如find . -name '*.wav' -type f
相結合find . -name '*.wav' -type f
find . -name '*.wav' -type f
您可以輕松查找和轉換目錄樹中的所有文件。
如果你一直在使用Python,你可以檢查Python綁定 。 基本:
import ffmpeg
ffmpeg.input('stereo.aac').output('mono.mp3').run()
最初我打算建議使用sox : Sound eXchange,瑞士軍刀的音頻處理 。 它不是Python,但有Python綁定 : pysox 。 然而,事實證明它不支持aac格式(仍然有許多其他格式)。 我認為無論如何都提到它可能會很有趣,因為人們可以先將ffmpeg轉換為更流行的格式,然后將管道結果轉換為sox 。 后者有更多選項可用於修改音頻流。
將wav轉換為mp3並重新采樣為128kbit:
sox -r 128k input-file.wav output-file.mp3
OP要求“通過max_gain_without_distortion dB增加音量”,為此我們可以使用gain
或norm
如文檔中所述 :
sox -r 128k input-file.wav output-file.mp3 gain −n -3
在docs之后, -n選項將音頻標准化為0dB FSD; 它通常與負增益-dB一起使用,以使音頻被歸一化到低於0dB的給定電平 。
sox −−norm -r 128k input-file.wav output-file.mp3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.