gpt4 book ai didi

node.js - 在视频播放器中立即知道总视频时长 (ffmpeg/html)

转载 作者:行者123 更新时间:2023-12-04 22:54:14 28 4
gpt4 key购买 nike

TL;博士
防止视频“延迟”加载视频总时长的正确 ffmpeg 设置是什么?
问题
我正在尝试使用 ffmpeg(在 NodeJS 中)对视频进行转码。
转码完成后,ffmpeg 会自动将视频上传到存储桶 (GCP)。
但是,ffmpeg 生成的视频在 HTML 视频播放器中播放时没有明确的总持续时间。只有在 x (milli) 秒后,总视频持续时间才能知道并显示出来。
代码
使用 fluent-ffmpeg NodeJS 库:

const settings: VideoHDPresetSettings = {
format: "mp4",
codec: "libx264",
size: "1920x1080",
ratio: "16:9",
options: [
"-movflags", "frag_keyframe+empty_moov+faststart",
"-preset", "veryfast",
"-crf", "16",
],
};

ffmpeg({source: "input.mp4"})
.format(settings.format)
.videoCodec(settings.codec)
.size(settings.size)
.aspectRatio(settings.ratio)
.outputOptions(settings.options)
.writeToStream(outputStream);
这是 fluent-ffmpeg 生成的命令:
ffmpeg -i input.mp4 -vcodec libx264 -filter:v scale=w=1920:h=1080 -f mp4 -movflags frag_keyframe+empty_moov+faststart -preset veryfast -crf 16 pipe:1
例子
原来的
这就是我想要的,当加载视频时,总的视频持续时间是立即知道的。
https://storage.googleapis.com/uhasselt/problem/original (已到期)
ffmpeg:
这是上面的代码生成的,当加载视频时,总视频持续时间是已知的。使用此视频很难检测到,因此请刷新几次,同时查看时间轴上视频的总时长。
https://storage.googleapis.com/uhasselt/problem/ffmpeg-result (已到期)
问题
防止视频“延迟”加载视频总时长的正确 ffmpeg 设置是什么?我究竟做错了什么?

最佳答案

经过一些额外的测试,我发现 .writeToStream(...)导致这种行为。这种保存技术用于将结果直接流式传输到某个 url,而无需将其保存在机器的本地磁盘上。
我现在使用 .save("./output/path.mp4")函数首先将 ffmpeg 的结果保存在磁盘上,然后我将其流式传输到我的存储桶(不包含在下面的代码中)。
我不确定为什么会这样...我认为这与 ffmpeg 现在能够在交付最终视频之前跳回并更改以前保存的元数据有关(这对于 .writeToStream(...) 来说是不可能的|因为数据流是一个连续的数据流,不能跳回)。
如果您使用 CLI ffmpeg 版本而不是 fluent-ffmpeg 此更改对应于不使用 pipe:1在您的 ffmpeg 命令结束时。
这是最终的解决方案

// Exactly the same
const settings: VideoHDPresetSettings = {
format: "mp4",
codec: "libvpx-vp9",
size: "1920x1080",
ratio: "16:9",
options: [
"-movflags", "frag_keyframe+empty_moov+faststart",
"-preset", "veryfast",
"-crf", "30",
],
};

ffmpeg({source: "input.mp4"})
.format(settings.format)
.videoCodec(settings.codec)
.size(settings.size)
.aspectRatio(settings.ratio)
.outputOptions(settings.options)
.save("./output.mp4"); // NEW!

关于node.js - 在视频播放器中立即知道总视频时长 (ffmpeg/html),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71185906/

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