Javascript 节点/ffmpeg音频持续时间:输入为缓冲区时不适用
我目前正在尝试使用节点处理音频,但将缓冲区作为输入。到目前为止,代码就是这样的Javascript 节点/ffmpeg音频持续时间:输入为缓冲区时不适用,javascript,node.js,linux,ffmpeg,Javascript,Node.js,Linux,Ffmpeg,我目前正在尝试使用节点处理音频,但将缓冲区作为输入。到目前为止,代码就是这样的 let uLawArguments = [ // arguments for ulaw extention '-c', `ffmpeg -ac 1 -ar 8000 -f mulaw -i -` ]; const ffMpeg = spawn('sh', uLawArguments); ffMpeg.stdin.write(audioBuffer); ffMpeg.stdin.end(); ffM
let uLawArguments = [ // arguments for ulaw extention
'-c',
`ffmpeg -ac 1 -ar 8000 -f mulaw -i -`
];
const ffMpeg = spawn('sh', uLawArguments);
ffMpeg.stdin.write(audioBuffer);
ffMpeg.stdin.end();
ffMpeg.stderr.pipe(process.stdout);
Ffmpeg将-i-
作为参数,通过stdin接受输入。通过类型为通道1、频率为8000的缓冲区后,我得到以下输出
Input#0,mulaw,来自“管道:”:
持续时间:不适用,比特率:64 kb/s
流#0:0:音频:pcm模拟,8000 Hz,单声道,s16,64 kb/s
我需要刮持续时间,但在我甚至可以格式化它之前,我需要它返回音频的实际持续时间。我认为目前的问题是ffmpeg在完全处理缓冲区之前就将其输出到stderr 音频的实际持续时间-哪个音频?当然,长度是N/A,因为它是未知的。你可能可以从缓冲区计算出来。我用了一个音频,它的类型是ulaw,也就是定义的mulaw
const audioBuffer=fs.readFileSync(filePath)
我用它从我已有的音频文件中获取缓冲区,然后您可能需要从该文件中获取持续时间。不是从一个还不存在的文件中。我可以很容易地从文件路径中获取它。我已经创建了一个支持该功能的模块。我还需要添加接受缓冲区的功能。顺便说一句,ffprobe是ffmpeg的一个很好的伙伴,可以实现这一目的。