是否可以对视频文件 blob 进行切片,然后在服务器端对其进行重新编码?

Is it possible to slice a video file blob and then re-encode it server side?

我一直在努力解决这个问题,我想要一个完整性检查。主要是如果我想做的事情甚至是可能的,因为我受到 react-native 的严重限制,它具有相当狡猾的 Blob 支持。

我们都知道视频编码是昂贵的,因此与其强制用户使用 ffmpeg 编码,不如将整个过程委托给后端。一切都很好,只是有时您可能想要 trim 30 秒的视频,而上传超过 3 分钟的视频毫无意义。

所以我有了将视频文件的 blob 切片的想法:

  const startOffset = (startTime * blobSize) / duration;
  const endOffset = (endTime * blobSize) / duration;
  const slicedBlob = blob.slice(startOffset, endOffset);
  // Setting the type as third option is ignored

类似这样,问题是文件到达后端后就变得完全不可读了。 React Native 无法处理 Blob 上传,因此将它们转换为 base64,这对于整个视频来说完全没问题,但对于切片的 blob 就不行了。

即使我保持开头不变:

  const slicedBlob = blob.slice(0, endOffset);

我觉得原因是文件变成了 application/octet-stream 这可能会影响解码?

我在这里有点不知所措,因为我无法理解这是 blob 的本机反应问题还是根本无法完成。

感谢任何意见。

p.s。我更喜欢在不使用外部库的情况下坚持使用 vanilla expo,我知道有一个可以处理 blob,但如果可能的话,我不热衷于依赖外部库来弹出。

您不能简单地切割文件块并使其在另一侧可读。例如,在 mp4 中,视频分辨率仅存储在一个位置。如果这些字节被删除,解码器就不知道如何解码视频。

是的,可以通过重写容器并删除完整的 GOP 来重新打包视频客户端。但是,您需要编写大约 1000 行代码,并且仅限于某些编解码器和容器。