Yang Anda inginkan adalah beberapa indikasi kenyaringan sampel. Untuk sinyal digital, ini dapat diukur melalui level RMS. Anda dapat menggunakan astats
filter dalam ffmpeg dengan injeksi metadata untuk mendapatkan level RMS per sampel:
ffmpeg -i input.m4a -filter:a "astats=metadata=1:reset=1,ametadata=mode=print:key=lavfi.astats.Overall.RMS_level:file=stats.txt" -f null -
Sini, metadata=1
dan reset=1
mengaktifkan keluaran metadata, dan ametadata
filter mencetak nilai-nilai tersebut ( mode=print
). Outputnya ditulis untuk stats.txt
sementara tidak ada pengkodean aktual dilakukan ( -f null -
). Log terlihat seperti ini:
frame:0 pts:0 pts_time:0
lavfi.astats.Overall.RMS_level=-77.999541
frame:1 pts:1536 pts_time:0.032
lavfi.astats.Overall.RMS_level=-68.693275
frame:2 pts:3072 pts_time:0.064
lavfi.astats.Overall.RMS_level=-62.974396
frame:3 pts:4608 pts_time:0.096
lavfi.astats.Overall.RMS_level=-61.259331
frame:4 pts:6144 pts_time:0.128
Anda dapat memfilter garis berdasarkan pada lavfi.astats.Overall.RMS_level
kunci dan gunakan nilai-nilai dB untuk visualisasi:
grep "lavfi.astats.Overall.RMS_level=" stats.txt | sed 's/lavfi.astats.Overall.RMS_level=//g' > stats_clean.txt
Minumum adalah minus tak terhingga, dan maksimum adalah 0 - jadi Anda harus menentukan sendiri nilai-nilai itu dengan tepat. Anda mungkin harus memfilter nilai-nilai ini berdasarkan beberapa filter rata-rata bergerak untuk mendapatkan visualisasi yang tepat.
PS: Dengan musik, tidak ada tunggal frekuensi audio. Audio yang Anda dengar terdiri dari frekuensi yang berbeda, yang kami sebut a spektrum . Sepertinya ini, di mana Anda melihat intensitas frekuensi tertentu dari waktu ke waktu:
ffmpeg astats
filter hanya dapat menampilkan informasi dalam domain waktu, bukan domain frekuensi (seperti yang ditunjukkan gambar di atas). Jika Anda ingin menghasilkan spektrum dengan ffmpeg, Anda dapat melakukannya dengan showspectrum
filter meskipun.