Як змінити частоту звуку?


12

Я хочу змінити частоту аудіофайлу. Значення: весь файл повинен звучати (сказати) на одну октаву вище або нижче. Як це зробити? Використання ffmpegабо іншого інструменту з відкритим кодом командного рядка буде кращим.

Відповіді:


14

З ffmpeg:

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

Тут 0,5 - коефіцієнт тону. Або дивіться іншу відповідь для отримання більш детальної інформації.


Якщо вам потрібен графічний інтерфейс, використовуйте Audacity , це безкоштовний, відкритий код, інструмент для редагування аудіо на різних платформах.

Особливості: Змінюйте висоту, не змінюючи темп, або навпаки.


Як альтернатива, спробуйте сокс . Щось схоже:

sox <infile> <outfile> pitch <shift>

де зсув нахилу подає як позитивні чи негативні «центи» (тобто 100-ту частину півтона). До октави належить 12 півтонів, так що це означатиме ± 1200як параметр.


приголомшливий ... сокс - це саме те, що мені потрібно!
tanon

Чи змінює метод використання ffmpeg тривалість звуку?
мрглоом

@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 Будь ласка, поставте нове запитання та включіть повний вихід командного рядка.
slhck

9

Заздалегідь знайдіть швидкість вхідного звуку таким чином:

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.