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


12

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

Ответы:


13

С помощью ffmpeg:

ffmpeg -i <input> -af asetrate=44100*0.5,aresample=44100 <output>

Здесь 0,5 - это коэффициент основного тона. Или посмотрите другой ответ для более подробной информации.


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

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


В качестве альтернативы попробуйте sox . Что-то такое:

sox <infile> <outfile> pitch <shift>

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


офигенно ... сокс это то что мне нужно!
Tanon

Меняет ли метод с использованием ffmpeg длительность аудио?
mrgloom

@ mrgloom Нет, не должно.
Slhck

После использования ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavвижу ffmpeg -iоригинальный wav Duration: 00:00:01.95, bitrate: 3080 kb/sи модифицированный wav Duration: 00:00:02.60, bitrate: 1536 kb/s. Как я понимаю, Durationэто длина в секундах.
mrgloom

@mrgloom Пожалуйста, напишите новый вопрос и включите полный вывод командной строки.
Slhck

8

Определите скорость звука на входе заранее:

ffmpeg -i input.mp4

Предполагая, что скорость звука на входе составляет 44 100 Гц, эта команда выполнит эту работу:

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

Коэффициент 3/4 изменит большинство женских и «тощих» (бурундук) голосов на мужские и «толстые» голоса. Используйте 4/3 для противоположного:

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

Обратите внимание на обратный порядок фильтра, чтобы предотвратить ухудшение сигнала. По возможности, операция без потерь должна предшествовать работе с потерями. Я не уверен на 100%, не ошибаюсь ли я здесь из-за неправильного понимания фильтров FFmpeg.

Фильтр FFmpeg asetrateдолжен иметь переменную, названную irдля входной скорости звука, аналогично iw× ihв некоторых видеофильтрах, но я не смог найти упоминания об этом в документации.

Для факторов больше 2 (например, 4/1 или 1/4) необходимо использовать несколько atempoфильтров (1/4 = 1/2 * 1/2 или 4/1 = 2/1 * 2/1):

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

Я не знаю, как получить «тощий» мужской голос и «толстый» женский голос.

Вместо -af, вы можете написать -filter:audioили -filter:a.

Ссылки

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.