首页 > 解决方案 > 将原始音频512浮点值输入FFMPEG?

问题描述

在 ActionScript 3 中,我使用SoundMixer.computeSpectrum()对舞台上播放的当前声波进行快照,并将其放入指定的 ByteArray 对象中。

我想将 ByteArray 写入 FFMPEG(通过 std -i pipe:0),但创建的 ByteArray 对象固定为 512 个浮点值,而 FFMPEG 似乎不支持该值。输出中的声音已损坏。

这是我在 AS3 中的代码的一部分:

stage.addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void{
    var soundBA:ByteArray = new ByteArray();
    SoundMixer.computeSpectrum(soundBA, false, 0);
    process.standardInput.writeBytes(soundBA);
}

标签: ffmpegfloating-pointactionscript

解决方案


这个答案解释了使用 ffmpeg 处理原始音频。

  1. 用户必须清楚音频的样本格式。您已经说过512 floating-point values- 这并不表示格式。我认为是f32le

  2. 所有数字音频都需要一个采样率(通常为 44.1khz 或 48khz)

  3. 通道数 - 无论是立体声还是单声道。

当您指定管道的输入时,会指定这些值。因此,对于浮点数据类型,以下输入规范是有效的 -

 -y -f f32le -ar 48000 -ac 2 
 -y -f f32le -ar 48000 -ac 1 
 -y -f f32le -ar 44100 -ac 2
 -y -f f32le -ar 44100 -ac 1

其中哪一个是你的?

根据此信息,您的命令可能是 -

ffmpeg <format> <sampling rate> <num channels> -i <pipe name> -f wav output.wav

这可能是——

ffmpeg -y -f f32le -ar 48000 -ac 2 -i <pipe name> -f wav output.wav

pipename 可以命名为 pipe 或使用 stdio(-i - 或 -i pipe:0)

更多信息在这里 - https://trac.ffmpeg.org/wiki/audio%20types


推荐阅读