ffmpeg - 将原始音频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);
}
解决方案
这个答案解释了使用 ffmpeg 处理原始音频。
用户必须清楚音频的样本格式。您已经说过
512 floating-point values
- 这并不表示格式。我认为是f32le
所有数字音频都需要一个采样率(通常为 44.1khz 或 48khz)
通道数 - 无论是立体声还是单声道。
当您指定管道的输入时,会指定这些值。因此,对于浮点数据类型,以下输入规范是有效的 -
-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)
推荐阅读
- html - 仅使用 CSS 和 HTML 设置特定 div 的样式,尽管它位于 div 中的许多 div 中
- google-sheets - 如果对象在某个时间范围内,则从时间范围/条件格式创建日历
- javascript - 通过 Twilio Studio 将消息从 WhatsApp 推送到 Twilio Flex 会导致架构验证警告 12200
- api - 使用 api 在 shopify 中添加客户的问题
- ios - MLKit iOS:架构 armv7 的未定义符号
- gtk - Julia + GTK - 回调中的全局变量更改
- javascript - 为什么我无法使用 Jquery 中的追加功能将数据提取到我的 HTML 文件中?
- node.js - 使用 angular-cli 运行测试时遇到 webpack\karma 错误
- wso2 - WSO2 IS 通过代码导入 OAuth 服务提供者
- linux - 为什么 Jenkins 构建按计划停止工作?