Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点/ffmpeg音频持续时间:输入为缓冲区时不适用_Javascript_Node.js_Linux_Ffmpeg - Fatal编程技术网

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的一个很好的伙伴,可以实现这一目的。