猿问

将视频编解码器转换为 vp9 到 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;codecs=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 一起用于视频分析?

预期的模仿类型:

http://img.mukewang.com/645c87d800012b8d06530331.jpg

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


明月笑刀无情
浏览 201回答 1
1回答

阿晨1998

您无法从浏览器的MediaRecorder API获取 MP4 。我相信,您可以使用亚马逊的 Elastic Transcoder 将 webm 转换为 mp4。如果您还没有这样做,您还应该尝试将您的 webm / h.264 文件提供给 Rekognition。正如您所意识到的,您的要求分为两部分,装箱和视频。我们需要一些词汇来详细回答您的问题。拳击首先是所谓的“装箱”或容器格式。webm是一种基于Matroska的格式,又基于可扩展二进制标记语言(EBML)。EBML 是为 Matroska 开发的。它类似于 XML,但占用更少的 RAM 和磁盘空间,因为它几乎没有那么冗长。 webm本身是一种开放且免版税的媒体文件标准。另一种装箱格式是MPEG-4的。它几乎与 Apple 的mov电影文件格式相同,称为mp4格式。WebRTC 有自己的适合数据报(而不是数据流)通信的装箱方案。超出你的问题范围。编解码器那些 webm 或 mp4 盒子里有什么?音频和视频数据。(它们还可以根据需要包含其他时间同步的数据流,如字幕。)h.264也称为高级视频编码、MPEG-4 Part 10 或 AVC。vp8,由谷歌收购的 On2 开发的开源和无专利编解码器h.265也称为高效视频编码或 HEVC。vp9,谷歌开发的最新开源和无专利编解码器。后两个较新的编解码器需要更多的计算周期来压缩。而 h.265 仍然承受着巨大的专利负担。所以浏览器和其他通用软件通常使用前两个,h.265 和 vp8。浏览器可以处理什么?Chromium 浏览器(Google Chrome、Edge)和 Firefox 具有MediaRecorder API。他们可以生成包含音频和/或视频的 webm-boxed 数据流。它们不能生成 mp4 盒装数据流。来自这些浏览器的数据流可以(截至 2020 年 10 月)包含 VP8 或 H.264 编码的视频。对于视频数据,可用的 MIME 类型是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 流。我没用过这个。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答