如何使用Pydub改变音频播放速度?

问题描述 投票:0回答:5

我是音频编辑库的新学习者 - Pydub。我想使用 Pydub 更改一些音频文件的播放速度(例如 .wav/mp3 格式文件),但我不知道如何制作。我看到的唯一可能解决这个问题的模块是effect.py中的speedup module。但是,没有解释我应该如何称呼它。

有人可以解释一下如何在 Pydub 中完成这项任务吗?非常感谢!

(相关问题:Pydub - 如何在不改变播放速度的情况下改变帧速率,但我想做的是在不改变音频质量的情况下改变播放速度。)

python audio mp3 wav pydub
5个回答
6
投票
from pydub import AudioSegment
from pydub import effects

root = r'audio.wav'
velocidad_X = 1.5 # No puede estar por debajo de 1.0

sound = AudioSegment.from_file(root)
so = sound.speedup(velocidad_X, 150, 25)
so.export(root[:-4] + '_Out.mp3', format = 'mp3')

5
投票

这可以使用pyrubberband包来完成,它需要rubberband库来拉伸音频,同时保持音调和高质量。我可以使用brew在MacOS上安装该库,也可以使用apt install在Ubuntu上安装该库。对于极限拉伸,请查看 PaulStretch

brew install rubberband

这仅适用于 librosa 包

import librosa
import pyrubberband
import soundfile as sf

y, sr = librosa.load(filepath, sr=None)
y_stretched = pyrubberband.time_stretch(y, sr, 1.5)
sf.write(analyzed_filepath, y_stretched, sr, format='wav')

为了让 Pyrubberband 直接与 pydub 中的 AudioSegment 一起工作而不需要 librosa,我摆弄了这个函数:

def change_audioseg_tempo(audiosegment, tempo, new_tempo):
    y = np.array(audiosegment.get_array_of_samples())
    if audiosegment.channels == 2:
        y = y.reshape((-1, 2))

    sample_rate = audiosegment.frame_rate

    tempo_ratio = new_tempo / tempo
    print(tempo_ratio)
    y_fast = pyrb.time_stretch(y, sample_rate, tempo_ratio)

    channels = 2 if (y_fast.ndim == 2 and y_fast.shape[1] == 2) else 1
    y = np.int16(y_fast * 2 ** 15)

    new_seg = pydub.AudioSegment(y.tobytes(), frame_rate=sample_rate, sample_width=2, channels=channels)

    return new_seg

1
投票

我知道已经晚了,但我写了一个程序将 mp3 转换为不同的播放速度。

首先,转换 .MP3 -> .Wav,因为 PYRubberBand 仅支持 .wav 格式。然后同时拉长时间和音调以避免花栗鼠效应。

import wave
import sys
from pydub import AudioSegment
#sound = AudioSegment.from_file("deviprasadgharpehai.mp3")
sound = AudioSegment.from_mp3(sys.argv[1])
sound.export("file.wav", format="wav")

print(sys.argv[1])

import soundfile as sf
import pyrubberband as pyrb
y, sr = sf.read("file.wav")
# Play back at extra low speed
y_stretch = pyrb.time_stretch(y, sr, 0.5)
# Play back extra low tones
y_shift = pyrb.pitch_shift(y, sr, 0.5)
sf.write("analyzed_filepathX5.wav", y_stretch, sr, format='wav')

sound = AudioSegment.from_wav("analyzed_filepathX5.wav")
sound.export("analyzed_filepathX5.mp3", format="mp3")

# Play back at low speed
y_stretch = pyrb.time_stretch(y, sr, 0.75)
# Play back at low tones
y_shift = pyrb.pitch_shift(y, sr, 0.75)
sf.write("analyzed_filepathX75.wav", y_stretch, sr, format='wav')

sound = AudioSegment.from_wav("analyzed_filepathX75.wav")
sound.export("analyzed_filepathX75.mp3", format="mp3")

# Play back at 1.5X speed
y_stretch = pyrb.time_stretch(y, sr, 1.5)
# Play back two 1.5x tones
y_shift = pyrb.pitch_shift(y, sr, 1.5)
sf.write("analyzed_filepathX105.wav", y_stretch, sr, format='wav')

sound = AudioSegment.from_wav("analyzed_filepathX105.wav")
sound.export("analyzed_filepathX105.mp3", format="mp3")

# Play back at same speed
y_stretch = pyrb.time_stretch(y, sr, 1)
# Play back two smae-tones
y_shift = pyrb.pitch_shift(y, sr, 1)
sf.write("analyzed_filepathXnormal.wav", y_stretch, sr, format='wav')

sound = AudioSegment.from_wav("analyzed_filepathXnormal.wav")
sound.export("analyzed_filepathXnormal.mp3", format="mp3")

**确保安装**

Wave、AudioSegment、FFmpeg、PYRubberBand、声音文件

要使用此运行,

python3 文件名.py mp3文件名.mp3


0
投票

改变音频的速度而不改变音调(或创建花栗鼠效果)。您可以使用下面的代码。

from pydub import AudioSegment
from pydub.effects import speedup

audio = AudioSegment.from_mp3(song.mp3)
new_file = speedup(audio,1.5,150)
new_file.export("file.mp3", format="mp3")

0
投票

首先从ffmpeg下载页面https://ffmpeg.org/download.html安装ffmpeg,然后解压zip文件并将其重命名为ffmpeg,然后将重命名的ffmpeg文件夹移动到C盘中。然后进入控制面板 -> 环境变量 -> 路径 -> 编辑 -> 新建 -> C: fmpeg in ,然后单击确定 然后 pip install ffmpeg

from pydub import utils, AudioSegment
from pydub.effects import speedup
def get_prober_name():
    return "C://ffmpeg/bin/ffprobe.exe"


AudioSegment.converter = "C://ffmpeg/bin/ffmpeg.exe"                  
utils.get_prober_name = get_prober_name
sound = AudioSegment.from_file("output.mp3",format="mp3")
final = speedup(sound, playback_speed=1.5) 
# speeds up the audio track by scale of 1.5
final.export("final.mp3",format="mp3")
© www.soinside.com 2019 - 2024. All rights reserved.