Мне нужно применить звук к видео в определенное время с определенной продолжительностью, но иногда требуется большая продолжительность звука (или меньше). Как изменить скорость звука без изменения высоты тона? Я попытался изменить 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")
Вам необходимо изменить высоту звука, так что это звучит нормально, когда воспроизводится на разной скорости. Это будет сделано путем повторной дискретизации звука с более высокой или меньшей скоростью. Простой пример: для игры с двойной скоростью требуется, чтобы шаг был уменьшен вдвое. – martineau
вам нужно использовать алгоритм фазового вокодера, чтобы время растягивало ваш звук, это может быть сложно, математически сложно разработать такой алгоритм – ederwander