首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Pydub改变音频播放速度?

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

Stack Overflow用户
提问于 2018-07-20 04:04:02
回答 4查看 15.8K关注 0票数 6

我是一个新的学习者音频编辑库- 派杜布。我想改变一些音频文件的播放速度使用Pydub(例如. .wav/mp3格式文件),但我不知道如何制作它。我看到的唯一能够解决这个问题的模块是effect.py中的加速比模块。然而,对于我该如何称呼它没有任何解释。

有人能解释一下在Pydub如何完成这个任务吗?非常感谢!

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

EN

回答 4

Stack Overflow用户

发布于 2020-03-02 19:00:35

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-12-10 14:53:36

这可以使用吡咯烷酮包,这需要橡皮筋库,可以拉伸音频,同时保持音高和高质量。我使用brew在MacOS上安装了这个库,在Ubuntu上也安装了apt。对于极限拉伸,请查看PaulStretch

代码语言:javascript
运行
复制
brew install rubberband

这简单地适用于librosa包。

代码语言:javascript
运行
复制
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')

为了使吡咯烷酮直接与来自pydub的AudioSegment一起工作,而不使用librosa,我篡改了这个函数:

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-07-03 12:24:33

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

首先,转换.MP3 -> .Wav,因为PYRubberBand只支持.wav格式。然后在时间和音高的同时,避免花栗鼠效应。

代码语言:javascript
运行
复制
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,Soundfile

要使用这个运行程序,

mp3filename.mp3 python3 filename.py

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51434897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档