Python模块改变MP3文件播放速度?

byqmnocz  于 2023-04-28  发布在  Python
关注(0)|答案(5)|浏览(235)

我有一些MP3文件,其中包含演讲者讲得很慢的演讲,我想改变MP3文件,使播放速率约为1。是正常速度的5倍。
有人能为这方面推荐一个好的Python库吗?顺便说一句,我正在运行Python 2。6在Windows上
先谢谢你了。

qyuhtwio

qyuhtwio1#

我写了一个库,pydub,主要是为了操纵音频而设计的。
我已经创建了一个实验性的时间拉伸算法,如果你有兴趣看看这些事情是如何工作的。
本质上,你想扔掉一部分数据,但你不能只是更快地回放波形,因为那样它会变得更高(正如synthesizerpatel提到的)。相反,你想扔掉块(20 Hz是人类能听到的最低频率,所以50 ms的块不会引起可听频率的变化,尽管还有其他伪影)。
PS -我得到50 ms这样:

20 Hz == 1 second per 20 cycles

or

1000 ms per 20 cycles

or

1000ms / 20Hz == 50ms per cycle
pvabu6sv

pvabu6sv2#

pymedia包含recode_audio。py的例子,允许任意输入输出格式可用here .这当然也需要安装pymedia。
请注意,正如Nick T所指出的,如果您只是更改采样率而不进行重采样,您将获得高音“快速”音频,因此您需要将time-stretching与更改比特率结合使用。

i34xakig

i34xakig3#

我也想达到同样的目的,我试过了所有建议的答案。不幸的是,pydub creator给出的答案不是很有描述性,我很难找到一个例子,而另一个最终是输出一个音调很高的文件。
最后,对我来说最简单的事情确实是按照建议使用pydub,但使用一个明显没有记录的(或者,很难找到)特性speedup
它非常简单:

from pydub import AudioSegment
import os

# A couple of var for readability
slow_mp3_path = "/path/to/my/slow.mp3"
fast_mp3_path = "/path/to/my/fast.mp3"

# Get the audiosegment from the file
slow_mp3_obj = AudioSegment.from_file(tmp_path)
# File's in memory, you can safely delete the original file if you want to save disk space now
os.remove(slow_mp3_path)
# Speed it up
speed_update = slow_mp3.speedup(1.5)
# Save the updated mp3
speed_update.export(fast_mp3_path, format="mp3")

就是这样,fast_mp3_path中的新文件将为1。5、不改变音高的速度。

mnemlml8

mnemlml84#

链接:https://mlhive.com/2022/11/read-and-process-audio-files-using-pydub-in-python#:~:text= Playback%20Speed%20and%20Volume,speed%20of%20the%20audio%20文件。

from pydub import AudioSegment
audio = AudioSegment.from_file("Audio_1.mp3", format="mp3")
print({
    'duration' : audio.duration_seconds,
    'sample_rate' : audio.frame_rate,
    'channels' : audio.channels,
    'sample_width' : audio.sample_width,
    'frame_count' : audio.frame_count(),
    'frame_rate' : audio.frame_rate,
    'frame_width' : audio.frame_width,
})
print()

final = audio.speedup(playback_speed=1.5)

# export to wav
final.export("final.wav", format="wav")
vlju58qv

vlju58qv5#

您可以在audio_segment中尝试_spawn模块。Pydub的py。下面是一个示例代码:

from pydub import AudioSegment
import os

def speed_swifter(sound, speed=1.0):
    return sound_with_altered_frame_rate = sound._spawn(sound.raw_data, overrides={"frame_rate": int(sound.frame_rate * speed)})

in_path = 'your/path/of/input_file/hello.mp3'
ex_path = 'your/path/of/output_file/hello.mp3'
sound = AudioSegment.from_file(in_path)    

# generate a slower audio for example
slower_sound = speed_change(sound, 0.5)

slower_sound.export(os.path.join(ex_path, 'slower.mp3'), format="mp3")

相关问题