将视频编解码器转换为 vp9 到 mp4?

Convert video codecs to vp9 to mp4?

我正在使用 js 中的 getUserMedia 函数录制视频

let options = {mimeType: 'video/webm;codecs=vp9'};
// here mediaStreamObj is stream returning from the getUserMedia
let mediaRecorder = new MediaRecorder(mediaStreamObj, options);

我希望解码器是h264 我也试过了 video/webm;编解码器=h264 在此它给出 mime 类型为 video/x-matroska

video/mp4;codecs=h264 - 不支持抛出错误

我需要 mimeType 作为 mp4 和编解码器 h264。

因为我在做视频分析(亚马逊识别)。我想在 php 中使用 startLabelDetection 来检测视频中的标签,而亚马逊只接受 h264 格式的视频。

https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-rekognition-2016-06-27.html#startlabeldetection

有没有人可以使用 js(最好)或 php 将视频 mime 类型转换为 mp4,以便我可以将其与 amazon rekognition 一起用于视频分析?

预期的 mime 类型:

您可以在此处查看 mime 类型 https://www.metadata2go.com/

tl;dr 您无法从您的浏览器 MediaRecorder APIs 获取 MP4。我相信,您可以使用亚马逊的 Elastic Transcoder 将 webm 转换为 mp4。如果您还没有这样做,您还应该尝试将您的 webm / h.264 文件提供给 Rekognition。

如您所知,您的要求分为两个部分,装箱和视频。我们需要一些词汇来详细回答您的问题。

拳击

首先是 so-called“装箱”或容器格式。 webm is a format based on Matroska, based in turn on Extensible Binary Markup Language (EBML). EBML was developed for Matroska. It's like XML but takes less RAM and disk space because it's not nearly as verbose. webm 本身是一个开放的 royalty-free 媒体文件标准。

另一种装箱格式是 MPEG-4 的。它与 Apple 的 mov movie-file 格式几乎相同,称为 mp4 格式。

WebRTC 有自己的适合数据报(而不是数据流)通信的装箱方案。超出你的问题范围。

编解码器

那些 webm 或 mp4 盒子里有什么?音频和视频数据。 (它们还可以根据需要包含其他 time-synchronized 数据流,例如字幕。)

  • h.264 也称为高级视频编码、MPEG-4 Part 10 或 AVC。
  • vp8,On2 开发的 open-source 和专利免费编解码器被 Google
  • 收购
  • h.265 也称为高效视频编码或 HEVC。
  • vp9,在 Google.
  • 开发的最新开源和无专利编解码器

后两个较新的编解码器需要更多的计算周期来压缩。而 h.265 仍然承受着巨大的专利负担。所以浏览器和其他 general-purpose 软件通常使用前两个,h.265 和 vp8。

浏览器可以处理什么?

Chromium 浏览器(Google Chrome、Edge)和 Firefox 有 MediaRecorder API。他们可以生成 webm-boxed 包含音频 and/or 视频的数据流。它们无法生成 mp4 盒装数据流。

来自这些浏览器的数据流可以(截至 2020 年 10 月)包含 VP8 或 H.264 编码的视频。在视频数据的情况下,available MIME types

  • video/webm; codecs="vp8"(对于 vp8)
  • x-matroska/webm; codecs="avc1.42E01E"video/webm; codecs="avc1.42E01E" 用于 H.264。

正式来说,您应该使用 x-matroska/video 而不是 webm/video 作为使用 H.264 的视频流的 MIME 类型,即使这两种 MIME 类型都可以在浏览器中使用。 webm 标准要求其视频编解码器为 vp8 或 vp9,因此 video/webm; codecs="avc1.42E01E",正式来说,不符合该标准。

Javascript 个模块

  • npm ebml 可以将数据拆箱和装箱到 webm 流中。我已经在大规模生产中使用了它的拆箱功能。有效。
  • npm mp4-box-encoding 可以将数据打包成 mp4 流。这个我没用过。