Как изменить частоту звука?

12320
tanon

Я хочу изменить частоту аудио файла. Значение: весь файл должен звучать (скажем) на одну октаву выше или ниже. Как это сделать? Использование ffmpegили другой инструмент с открытым исходным кодом командной строки будет предпочтительнее.

8

2 ответа на вопрос

9
slhck

Если вам нужен графический интерфейс, используйте Audacity, это бесплатный кросс-платформенный инструмент для редактирования аудио с открытым исходным кодом.

Особенности: Изменение высоты тона без изменения темпа или наоборот.

Если вы хотите использовать командную строку, попробуйте sox :

SoX - это кроссплатформенная (Windows, Linux, MacOS X и т. Д.) Утилита командной строки, которая может конвертировать различные форматы компьютерных аудиофайлов в другие форматы. Он также может применять различные эффекты к этим звуковым файлам, и, в качестве дополнительного бонуса, SoX может воспроизводить и записывать аудиофайлы на большинстве платформ.

Что-то вроде того:

sox <infile> <outfile> pitch <shift> 

где дает сдвиг высоты тона как положительные или отрицательные «центы» (т. е. сотые доли полутона). В октаве 12 полутонов, так что это означает ± 1200как параметр.

офигенно ... сокс это то что мне нужно! tanon 13 лет назад 0
4
7vujy0f0hy

Find input audio rate beforehand thus:

ffmpeg -i input.mp4 

Assuming input audio rate 44,100 Hz, this command will do the job:

ffmpeg -i input.mp4 -af asetrate=44100*3/4,atempo=4/3 output.mp4 

The factor of 3/4 will change most female and “skinny” (chipmunk) voices into male and “fat” voices. Use 4/3 for the opposite:

ffmpeg -i input.mp4 -af atempo=3/4,asetrate=44100*4/3 output.mp4 

Notice reversed filter order to prevent signal degradation. Whenever possible, lossless operation should come before lossy operation. I’m not 100% sure whether I’m not making some mistake here from misunderstanding FFmpeg filters.

FFmpeg filter asetrate should have a variable named ir for input audio rate, in analogy to iw×ih in some video filters, but I couldn’t find any mention of it in the documentation.

For factors greater than 2 (such as 4/1 or 1/4), you must use multiple atempo filters (1/4 = 1/2 * 1/2 or 4/1 = 2/1 * 2/1):

ffmpeg -i input.mp4 -af asetrate=44100*4,atempo=1/2,atempo=1/2 output.mp4 

I don’t know how to obtain “skinny” male voice and “fat” female voice.

Instead of -af, you can write -filter:audio or -filter:a.

References