FFmpeg从video转换为audio丢失的持续时间

我试图通过他们的直接videourl(使用ytdl-core检索)加载YouTubevideo。 我使用request库加载它们。 然后我把结果输出到一个stream,用作ffmpeg的input(通过fluent-ffmpeg )。 代码看起来像这样:

 var getAudioStream = function(req, res) { var requestUrl = 'http://youtube.com/watch?v=' + req.params.videoId; var audioStream = new PassThrough(); var videoUrl; ytdl.getInfo(requestUrl, { downloadURL: true }, function(err, info) { res.setHeader('Content-Type', 'audio/x-wav'); res.setHeader('Accept-Ranges', 'bytes'); videoUrl = info.formats ? info.formats[0].url : ''; request(videoUrl).pipe(audioStream); ffmpeg() .input(audioStream) .outputOptions('-map_metadata 0') .format('wav') .pipe(res); }); }; 

这实际上工作得很好,前端成功接收WAV格式的audio并且可以播放。 但是,audio缺less关于其大小或持续时间(以及所有其他元数据)的任何信息。 这也使得它不可见。

我假设这是在ffmpeg阶段丢失的地方,因为如果我直接通过URL传递的request加载和播放罚款,并有一个设置的持续时间/是可以search的video直接加载video。 有任何想法吗?

在完成之前,不可能知道输出的大小和持续时间。 在大多数情况下,FFmpeg不能提前知道这些信息。 即使可能,你执行FFmpeg的方式也会阻止你访问额外的信息。

此外,为了支持寻求你需要支持范围的要求。 这也是不可能的,即将文件编码到所请求的字节并从那里stream式传输。

基本上,这是不可能的,你在做什么的性质。