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

时间:2020-10-14 07:03:38

标签: javascript video getusermedia amazon-rekognition web-mediarecorder

我正在通过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; codecs = h264 在这种情况下,它使mime类型为video / x-matroska image

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一起用于视频分析?

预期的模仿类型:

enter image description here

您可以在https://www.metadata2go.com/

上查看哑剧类型。

1 个答案:

答案 0 :(得分:1)

tl; dr 您无法从浏览器的MediaRecorder APIs获取MP4。我相信,您可以使用Amazon的Elastic Transcoder将webm转换为mp4。如果尚未将webm / h.264文件也提供给Rekognition,则应该这样做。

您已经意识到,您的要求包括拳击和视频两部分。我们需要一些词汇来详细回答您的问题。

拳击

首先是所谓的“装箱”或容器格式。 webm是一种基于Matroska的格式,依次基于Extensible Binary Markup Language(EBML)。 EBML是为Matroska开发的。它就像XML,但占用的RAM和磁盘空间更少,因为它并不那么冗长。 webm本身是一种开放的,免版税的媒体文件标准。

另一种拳击格式是MPEG-4。它几乎与Apple的 mov 电影文件格式相同,称为 mp4 格式。

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

编解码器

那些webm或mp4盒中的内容是什么?音频和视频数据。 (根据需要,它们还可以包含其他时间同步的数据流,例如字幕)。

  • h.264也称为高级视频编码,MPEG-4第10部分或AVC。
  • vp8,由Google收购的On2开发的开源且无专利的编解码器
  • h.265也称为高效视频编码或HEVC。
  • vp9,是Google开发的最新的开源和无专利编解码器。

后两种更新的编解码器需要更多的计算周期才能进行压缩。而且h.265仍然承受着巨大的专利负担。因此,浏览器和其他通用软件通常使用前两个h.265和vp8。

浏览器可以处理什么?

铬浏览器(Google Chrome,Edge)和Firefox使用MediaRecorder API。他们可以生成包含音频和/或视频的webm装箱的数据流。他们无法生成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。

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

Javascript模块

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