gpt4 book ai didi

node.js - 是否可以从单个流字节范围 block 创建新的 mp4 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:24 24 4
gpt4 key购买 nike

如果我在支持字节范围的服务器上有一个远程 mp4 文件,是否可以检索单个字节范围并从该范围数据创建一个新的/自包含的 mp4?

如果我尝试使用 fs.createWriteStream(remoteFilename) 将返回的字节范围数据直接写入 mp4 文件,它不会获得它所包含的视频元数据(持续时间、尺寸等)需要可玩。

当我得到一个以 0 开头并以 XX 结尾的字节范围时,输出 mp4 可以播放,但将具有整个视频长度的持续时间元数据,并在字节范围完成剩余部分时卡住屏幕的持续时间。

我还能如何获取字节范围并从该流对象创建独立的 .mp4 文件?

这样做的目的是为了避免在我使用 ffmpeg 制作 5 秒的剪辑之前下载整个 10 分钟的文件。如果我可以计算并下载字节范围,应该有办法将其写入独立的 mp4 文件。

在此先感谢您提供的任何帮助。

最佳答案

MP4 文件由框构成。其中两个主要是 moov 和 mdat(非碎片化 MP4 的一般情况):

  • moov 框:包含其他框 :) - 每个框都包含有关 mdat 框中存在的编码数据的信息(moov = 关于 MP4 文件的元数据)。典型的元数据是持续时间、帧率、编解码器信息、对视频/音频帧的引用......
  • mdat 框:包含文件的实际编码数据。它可以来自各种编解码器,包括音频和视频数据(如果恰好是其中之一)。对于 H264,NAL 单元包含在 mdat 框中。

对于 MP4 文件 Web 传输,moov 框(应该是)在文件的开头,因此如果您写入从 0 到 XX 的字节范围请求,您可能会得到整个 moov 框 + 一定数量的 mdat 数据。因此文件可以播放到某个点。如果你的字节范围从 YY 到 XX,你可能不会得到一个像样的 moov 框,但是很多 mdat 不能使用,除非它们被重新打包到一个 MP4 文件中,并有一个合适的 moov 框引用关于“剪切”mdat 的信息.

可以从字节范围 block 重新创建有效的 MP4 文件,但这需要 MP4 文件格式结构的高级知识(您还需要检索 moov 框以使其可以忍受)。 MP4 文件格式基于 ISO base media file format - 被指定为 ISO/IEC 14496-12(MPEG-4 第 12 部分)。

我知道 2 个库可以帮助你做你想做的事:一个在 PHP 中和一个 Java .我不知道 node.js 是否存在这样的库(我想它可以被移植)。即使您不使用它们,上面的 2 个库也包含有关该主题的有值(value)的信息。

要回答您的问题,您可以换个角度解决问题。在几毫秒内知道你想要文件的哪一部分,你可以执行一个 ffmpeg 命令将全长 MP4 文件服务器端拼接成一个较小的文件,然后用这个新的较小的 MP4 文件做你需要的(因为你不需要在客户端下载不必要的数据)。

为此的 ffmpeg 命令是(在本例中从文件开始处剪切 1 分钟):

ffmpeg -i input.mp4 -ss 00:00:00.000 -t 00:01:00.000 -c:a copy -c:v copy output.mp4

有关 above command line 的更多信息,请参阅此帖子

这完成得非常快,因为 MP4 文件结构只是重新组织,没有重新转码。

编辑: 或者我可以在远程文件上使用 ffmpeg 并在本地创建新剪辑吗?

ffmpeg -ss 00:01:00.000 -i "http://myfile.mp4" -t 00:02:00.000 -c:a copy -c:v copy output.mp4

假设您的客户端(应用程序/网络)上有 ffmpeg,如果您运行上述命令,ffmpeg 会将 mp4 提取到输入 URL,然后寻找 1 分钟并从那里剪切 2 分钟,然后将生成的内容写入输出。 mp4 本地(当然无需下载完整文件)。

ffmpeg 需要构建为支持 http protocol input (你会在大多数二进制文件中找到)。你可以阅读here有关在何处放置 -ss 参数(优点/缺点)的更多信息。

关于node.js - 是否可以从单个流字节范围 block 创建新的 mp4 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161854/

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