gpt4 book ai didi

javascript - FFmpeg从视频转换为音频缺少持续时间

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:54 24 4
gpt4 key购买 nike

我正在尝试通过直接视频 URL 加载 YouTube 视频(使用 ytdl-core 检索)。我使用 request 库加载它们。然后,我将结果通过管道传输到一个流,该流用作 ffmpeg 的输入(通过 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 格式的音频并且可以播放。但是,音频缺少有关其大小或持续时间(以及所有其他元数据)的任何信息。这也使得它变得不可寻找。

我假设它在 ffmpeg 阶段的某个地方丢失了,因为如果我直接通过传递给 request 的 URL 加载视频,它会加载并正常播放,并且有设定的持续时间/可搜索。有什么想法吗?

最佳答案

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

此外,为了支持搜索,您需要支持范围请求。这也是不可能的,除非将文件编码到请求的字节并从那里开始流式传输。

基本上,从您所做的事情的性质来看,这是不可能的。

关于javascript - FFmpeg从视频转换为音频缺少持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27390502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com