Bagaimana cara mengubah frekuensi audio?

12

Saya ingin mengubah frekuensi file audio. Artinya: seluruh file seharusnya berbunyi (katakanlah) satu oktaf lebih tinggi atau lebih rendah. Bagaimana cara melakukannya? Menggunakan ffmpegatau alat open source baris perintah lainnya akan lebih disukai.

tanon
sumber

Jawaban:

13

Dengan ffmpeg:

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

Di sini, 0,5 adalah faktor nada. Atau lihat jawaban lain untuk lebih jelasnya.


Jika Anda membutuhkan GUI, gunakan Audacity , ini alat pengedit audio lintas platform gratis, open source.

Fitur: Ubah nada tanpa mengubah tempo, atau sebaliknya.


Sebagai alternatif, coba sox . Sesuatu seperti itu:

sox <infile> <outfile> pitch <shift>

di mana memberikan perubahan nada sebagai 'sen' positif atau negatif (yaitu 100 per semitone). Ada 12 semiton ke satu oktaf, sehingga itu berarti ± 1200sebagai parameter.

slhck
sumber
keren ... sox adalah apa yang saya butuhkan!
tanon
Apakah metode menggunakan ffmpeg mengubah durasi audio?
mrgloom
@ Mr Gloom Tidak, seharusnya tidak.
slhck
Setelah menggunakan ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavsaya melihat dengan ffmpeg -iwav asli Duration: 00:00:01.95, bitrate: 3080 kb/sdan modifikasi wav Duration: 00:00:02.60, bitrate: 1536 kb/s. Yang saya mengerti Durationadalah panjang dalam hitungan detik.
mrgloom
@ mrgloom Silakan kirim pertanyaan baru dan sertakan output baris perintah lengkap.
slhck
8

Temukan input audio rate sebelumnya:

ffmpeg -i input.mp4

Dengan asumsi input audio rate 44.100 Hz, perintah ini akan melakukan pekerjaan:

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

Faktor 3/4 akan mengubah sebagian besar suara wanita dan "kurus" (tupai) menjadi suara pria dan "gemuk". Gunakan 4/3 untuk sebaliknya:

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

Perhatikan urutan filter terbalik untuk mencegah degradasi sinyal. Kapan saja memungkinkan, operasi lossless harus dilakukan sebelum operasi lossy. Saya tidak 100% yakin apakah saya tidak membuat kesalahan di sini dari kesalahpahaman filter FFmpeg.

Filter FFmpeg asetrateharus memiliki nama variabel iruntuk input audio rate, dalam analogi dengan iw× ihdalam beberapa filter video, tetapi saya tidak dapat menemukan menyebutkannya dalam dokumentasi.

Untuk faktor yang lebih besar dari 2 (seperti 4/1 atau 1/4), Anda harus menggunakan beberapa atempofilter (1/4 = 1/2 * 1/2 atau 4/1 = 2/1 * 2/1):

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

Saya tidak tahu cara mendapatkan suara pria "kurus" dan suara wanita "gemuk".

Alih-alih -af, Anda dapat menulis -filter:audioatau -filter:a.

Referensi

7vujy0f0hy
sumber