是否可以仅使用html5和js剪切部分视频并将其上传到服务器

Ser*_*kin 7 html javascript video blob filereader

我使用 Filereader 读取本地视频文件(mp4),因此我可以将其显示在视频标签中。

我需要剪切 mp4 文件的一部分(即从 5 到 10 秒)并将其上传到服务器上。

我当前的解决方案:我使用“from”和“to”参数在服务器上上传整个视频文件,在服务器上使用 ffmpeg 剪切它,上传到 s3 并返回 url 视频。

也许只能用 JS/HTML 才能实现?我找到了 Blob.slice 方法,但我不知道如何使用它来剪切视频部分。

谢谢!

Mic*_*ick 11

mp4 视频文件由“原子”组成,就像文件中的信息或数据块。

它们包含有关电影中曲目的标题和元数据(音频、视频、字幕等)以及媒体数据本身。

这些概念很简单,但是当您查看一个 mp4 文件时,它会非常复杂 - Apple 开发人员网站上有一个很好的示例(https://developer.apple.com/library/content/documentation/QuickTime/RM/Fundamentals /QTOverview/QTOverview_Document/QuickTimeOverview.html):

在此输入图像描述

如果您通过简单地从文件中的某个点到其他点获取字节来获取 mp4 文件的“切片”,您可以看到您将丢失标头信息等,具体取决于您从哪里开始,并且也很可能从“原子”的中间。

当您想要剪切部分视频时,像 ffmpeg 这样的工具可以完成提取和重组文件的艰苦工作。

有些项目在 Bowser 中运行 ffmpeg,但我不确定它们的实用性或采用程度如何 - 无论如何,这个项目似乎很受欢迎:

2023 年 2 月更新

Web 汇编语言使浏览器中的计算密集型操作变得更加可行。下面的 ffmpeg WASM 项目使用 WASM 在浏览器中实现 ffmpeg,根据我的经验,它运行良好。

您确实需要意识到 SharedArrayBuffer 支持的必要性:

只有支持 SharedArrayBuffer 的浏览器才能使用 ffmpeg.wasm,您可以在此处查看完整列表。

上面提到的链接在这里: https: //caniuse.com/sharedarraybuffer