2016-12-30 217 views
3

我需要在一段时间内将音频应用于视频,但需要一些音频持续时间更长(或更短)。如何改变音频的速度而不改变音调?我试图改变fps(通过乘以所需的持续时间除音频持续时间),但它不是我想要的。如何在不改变音调的情况下更改音频速度?

original = VideoFileClip("orig.mp4") 
clips = [orig.audio.volumex(0.3)] 
subs = [] #some array 
i = 0 
for sub in subs: 
    clip = AudioFileClip("\\temp{}.mp3") 
    mult = clip.duration/(sub.end - sub.start) + 0.00001 
    clip = AudioArrayClip(clip.to_soundarray(buffersize=500, fps=24000/mult), fps=24000).set_start(sub.start).set_end(sub.end) 
    clips.append(clip) 
    i += 1 

final = CompositeAudioClip(clips) 
final.write_audiofile("final.mp3") 
+0

您需要更改音频的音调,以便在不同的速度回放时听起来正常。这可以通过以相应更高或更低的速率重新采样音频来完成。简单的例子:以双倍速度播放将需要将音高减半。 – martineau

+0

你需要用相位声码器算法来延长你的音频时间,这会很难,这种算法的发展是数学上复杂的 – ederwander

回答

1

使用波:改变采样率

import wave 

CHANNELS = 1 
swidth = 2 
Change_RATE = 2 

spf = wave.open('VOZ.wav', 'rb') 
RATE=spf.getframerate() 
signal = spf.readframes(-1) 

wf = wave.open('changed.wav', 'wb') 
wf.setnchannels(CHANNELS) 
wf.setsampwidth(swidth) 
wf.setframerate(RATE*Change_RATE) 
wf.writeframes(signal) 
wf.close() 
+2

只是改变采样率不是方式,它会随着音调改变速度... – ederwander

相关问题