Я хочу изменить частоту аудио файла. Значение: весь файл должен звучать (скажем) на одну октаву выше или ниже. Как это сделать? Использование ffmpeg
или другого инструмента командной строки с открытым исходным кодом было бы предпочтительным.
2 ответа
С помощью ffmpeg:
ffmpeg -i <input> -af asetrate=44100*0.5,aresample=44100 <output>
Здесь 0,5 - это коэффициент основного тона. Или посмотрите другой ответ для более подробной информации.
Если вам нужен графический интерфейс, используйте Audacity, это бесплатный кросс-платформенный инструмент для редактирования аудио с открытым исходным кодом.
Особенности: Изменение высоты тона без изменения темпа или наоборот.
В качестве альтернативы попробуйте sox. Что-то вроде того:
sox <infile> <outfile> pitch <shift>
где дает сдвиг высоты тона как положительные или отрицательные «центы» (т. е. сотые доли полутона). На октаву приходится 12 полутонов, так что это означает ± 1200
в качестве параметра.
Определите скорость звука на входе заранее:
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.
У asetrate
фильтра FFmpeg должна быть переменная 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
.