FFmpeg 从视频转换为音频缺少持续时间
FFmpeg converting from video to audio missing duration
我正在尝试通过他们的直接视频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 的方式也会阻止您访问额外的信息。
此外,要支持搜索,您需要支持范围请求。 这也是不可能的,除非将文件编码到请求的字节并从那里流式传输。
基本上,根据您正在做的事情的性质,这是不可能的。
相关文章:
- 在jQuery中,短距离长持续时间的精细字体大小动画
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 输入视频文件时获取视频持续时间
- 无填充的滚动魔术持续时间
- 我需要在每5秒内调用一个函数,并重置持续时间
- jQuery动画的持续时间就像一个延迟
- 如何在特定时间重新加载page.php,例如:07:45.非持续时间,例如:每5秒
- 如何在dhtmlxgantt中显示灯箱中的开始日期、结束日期和持续时间
- Javascript - 具有音高和持续时间控制的文本到语音
- HTML 5 音频 :是否有在更改缓冲持续时间时触发的事件
- 如何使用 HTML5 音频计算一组曲目的总持续时间
- FFmpeg 从视频转换为音频缺少持续时间
- 使用jQuery将音频播放限制为仅特定的持续时间
- 在chrome - js中无法获得音频持续时间
- 使用web音频API在指定持续时间(毫秒)后停止播放声音
- 音频剪辑在第一次使用HTML5播放时没有获得持续时间
- Firefox 6 HTML音频.持续时间= NaN问题
- HTML5:如何获取音频标签的currentTime和持续时间(以毫秒为单位)
- 在Chrome上获得音频持续时间为Android
- 音频持续时间返回NaN需要一些修改来运行播放器