【问题标题】:将原始音频512浮点值输入FFMPEG?
【发布时间】:2021-11-20 19:28:51
【问题描述】:

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

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

这是我在 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);
}

【问题讨论】:

  • 您需要每帧写出连续的字节。所以不行。样本数 * 采样率。这就是管道输入的工作原理,您在每帧的基础上写出数据,然后告诉 ffmpeg 数据的详细信息,以便对其进行处理。
  • 您知道“512 个浮点值”是否是数据包大小,样本的“深度”是多少?它是 32 位还是 16 位...?我在文档中找不到。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 以及如何在 AS3 中捕获样本 * 采样率/秒以适应 FFMPEG 音频格式?

标签: ffmpeg floating-point actionscript


【解决方案1】:

这个答案解释了使用 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

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 2018-07-18
    • 2018-09-22
    • 2023-03-12
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多