FFMPEG или FFPLAY, ловите сигнал FFT в реальном времени в виде поплавков

Требуется извлечь в режиме реального времени моментальный снимок данных формы сигнала БПФ с помощью ffplay для создания анимации.

Это именно то, что я хочу уловить, но эта демонстрация использует JavaScript в браузере. (Исходный собственный пост)

const audio = document.getElementById('music');
audio.load();
audio.play();

const ctx = new AudioContext();
const audioSrc = ctx.createMediaElementSource(audio);
const analyser = ctx.createAnalyser();

audioSrc.connect(analyser);
analyser.connect(ctx.destination);

analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
const frequencyData = new Uint8Array(bufferLength);

setInterval(() => {
   analyser.getByteFrequencyData(frequencyData);
   console.log(frequencyData);
}, 1000);
<audio id="music" src="http://strm112.1.fm/reggae_mobile_mp3" crossorigin="use-URL-credentials" controls="true"></audio>


Я испробовал множество вариантов метода, опубликованного на https://trac.ffmpeg.org/wiki/Waveform .

введите здесь описание изображения

Проблема заключается в том, что выходной формат для БПФ — PCM (Импульсно-кодовая модуляция), а не в реальном времени.


В общем, есть ли простой способ сделать это, во время воспроизведения звука, чтобы получить эти данные?

ffplay -fft file.mp3 > fft.json

Используя C, то же самое: Применить FFT к данным PCM и преобразовать в спектрограмму

документация по фильтру сигналов FFMPEG


person NVRM    schedule 19.04.2021    source источник


Ответы (1)


В качестве альтернативы можно использовать sox в качестве замены, например:

play https://radios.vpn.sapo.pt/CV/radio4.mp3 -n stat -freq

Установить:

sudo apt install sox libsox-fmt-mp3

введите здесь описание изображения

person NVRM    schedule 25.04.2021