python如何將音頻進行變速

有的時候需要手裏的音頻文件變速聽,或可能變慢或可能變快

這裏使用的python進行操作,我的目標是將文件轉成2倍速

首先需要安裝插件

pip install ffmpeg

然後再執行:

from ffmpeg import audio
audio.a_speed("D:\\1505.mp3", "2", "D:\\1505_2x.mp3")

如果執行不出錯,會返回一個true

運行結果

我可以看到這裏的音頻速度提升以後音頻小了

這裏我是將目標路徑下的MP3音頻轉成了2倍速的,設立不侷限於MP3。其他格式的音頻文件也是可以進行處理的。

當然這裏還可以進行批量操作

import os
import sys
from ffmpeg import audio

audio_path = "D:\\audio\\" 
finish_path = "D:\\2x_audio\\"
 
def run():
    audio_file = os.listdir(audio_path)
    for i, audio1 in enumerate(audio_file):
        print(audio_path+audio1)
        audio.a_speed(audio_path+audio1, "2", finish_path+"2x"+audio1)
run()

實際上這個的源碼幹了一件這個事情

import subprocess


# 調整音頻播放速率
def a_speed(input_file, speed, out_file):
    try:
        cmd = "ffmpeg -y -i %s -filter_complex \"atempo=tempo=%s\" %s" % (input_file, speed, out_file)
        res = subprocess.call(cmd, shell=True)

        if res != 0:
            return False
        return True
    except Exception:
        return False

實際可以看到,使用的f調用的原生的fmpeg,也就是基於fmpeg開發的

不過好像我發現,如果音頻文件太大會失敗,返回false

我試過原生的fmpeg是可以進行的,只是會轉換很慢

D:\>ffmpeg -n -i 222.mp3 -filter:a "atempo=2" output.mp3

現在不知道是不是因爲限制了大小(現在猜測可能是顯示了大或者限制了響應時間大小,在源碼裏沒有發現什麼詭異的地方),音頻不算大的是沒問題的,我試的單個文件是100多兆的文件,會失敗,但是10m是沒有問題的。

實在不行就直接用原生的好了

import os
import sys
#from ffmpeg import audio

audio_path = "D:\\audio\\" 
finish_path = "D:\\2x_audio\\"
 
def run():
    audio_file = os.listdir(audio_path)
    for i, audio1 in enumerate(audio_file):
        #print(audio_path+audio1)
        cmd="ffmpeg -n -i "+audio_path+audio1+" -filter:a atempo=2 "+finish_path+"2x"+audio1
        #print(cmd)
        os.system(cmd)
        #audio.a_speed(audio_path+audio1, "2", finish_path+"2x"+audio1)
run()

後來發現,最好音頻的文件名不要有漢字

上面另兩個代碼應該都是可以的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章