Конвертировать видеокодеки из vp9 в mp4?

Я записываю видео из функции getUserMedia в js с опцией

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, здесь он дает тип пантомимы как video / x-matroska  image

video / mp4; codecs = h264 - не поддерживается, выдает ошибку

Мне нужен mimeType как mp4 и кодеки h264.

Пока работаю над видеоанализом (распознавание амазонок). и я хочу использовать startLabelDetection в php для обнаружения меток в видео, а amazon принимает только видео в формате h264.

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

Есть ли кто-нибудь, у кого я могу преобразовать mime-тип видео в mp4 с помощью js (предпочтительно) или php, чтобы я мог использовать его с amazon rekognition для анализа видео?

Ожидаемый mimetype:

введите описание изображения здесь

Вы можете проверить тип пантомимы здесь, https://www.metadata2go.com/


person Ayush Srivastava    schedule 14.10.2020    source источник
comment
вам может быть интересно узнать, что контейнер WebM основан на профиле Matroska   -  person Jaromanda X    schedule 14.10.2020
comment
смотрю mdn docs ... video/mp4; codecs="avc1.4d002a"? есть хорошее объяснение того, что ставить после . в это документация   -  person Jaromanda X    schedule 14.10.2020
comment
@JaromandaX не поддерживается в chrome (js), вы можете проверить это MediaRecorder.isTypeSupported('video/mp4; codecs="avc1.4d002a'), он даст значение false. Моя основная цель - получить видео с кодеками h264, чтобы использовать его для распознавания aws.   -  person Ayush Srivastava    schedule 14.10.2020


Ответы (1)


tl; dr. Вы не можете получить MP4 из API MediaRecorder. Я считаю, что вы можете заставить Amazon Elastic Transcoder конвертировать webm в mp4. Вам также следует попробовать передать ваши файлы webm / h.264 в Rekognition, если вы еще этого не сделали.

Как вы уже поняли, ваши требования состоят из двух частей: бокса и видео. Нам понадобится немного словарного запаса, чтобы подробно ответить на ваш вопрос.

Заниматься боксом

Прежде всего, это так называемый бокс или контейнерный формат. webm - это формат, основанный на Matroska, в свою очередь, на основе Расширяемый двоичный язык разметки (EBML). EBML был разработан для Matroska. Это похоже на XML, но требует меньше оперативной памяти и дискового пространства, потому что он не такой подробный. webm сам по себе является открытым и бесплатным стандартом для файлов мультимедиа.

Другой формат бокса - это MPEG-4. Он почти идентичен формату файлов фильмов Apple mov и называется форматом mp4.

WebRTC имеет свои собственные схемы боксов, адаптированные для передачи дейтаграмм (вместо потоков данных). За рамками вашего вопроса.

Кодек

Что находится в этих ящиках webm или mp4? Аудио и видео данные. (Они также могут содержать другие синхронизированные по времени потоки данных, такие как подписи, по мере необходимости.)

  • h.264, также известный как Advanced Video Coding, MPEG-4 Часть 10, или AVC.
  • vp8, кодек с открытым исходным кодом и без патентов, разработанный On2 приобретено Google
  • h.265, также известный как высокоэффективное кодирование видео или HEVC.
  • vp9, новейший кодек с открытым исходным кодом и без патентов, разработанный в Google.

Два последних, более новых, кодека требуют большего количества вычислительных циклов для сжатия. И h.265 по-прежнему требует значительного патентного бремени. Таким образом, браузеры и другое универсальное программное обеспечение обычно используют первые два, h.265 и vp8.

С чем могут справиться браузеры?

Браузеры Chromium (Google Chrome, Edge) и Firefox имеют MediaRecorder API . Они могут создавать потоки данных в Webm-боксах, содержащие аудио и / или видео. Они не могут создавать потоки данных в формате mp4.

Эти потоки данных из этих браузеров могут (по состоянию на октябрь 2020 года) содержать видео в кодировке VP8 или H.264. В случае видеоданных доступные типы MIME являются

  • video/webm; codecs="vp8" (для vp8)
  • x-matroska/webm; codecs="avc1.42E01E" или video/webm; codecs="avc1.42E01E" для H.264.

Формально говоря, вы должны использовать x-matroska/video, а не webm/video в качестве типа MIME для видеопотоков, использующих H.264, даже если любой тип MIME работает в браузерах. Стандарт webm требует, чтобы его видеокодеки были либо vp8, либо vp9, поэтому video/webm; codecs="avc1.42E01E", формально говоря, не соответствует этому стандарту.

Модули Javascript

  • npm ebml может распаковывать и упаковывать данные в потоки webm. Я использовал его возможности распаковки в крупномасштабном производстве. Оно работает.
  • npm mp4-box-encoding может упаковывать данные в потоки mp4. Я этим не пользовался.
person O. Jones    schedule 22.10.2020
comment
Я потратил слишком много времени, пытаясь разобраться во всех этих ситуациях типа MIME методом проб и ошибок. API MediaRecorder действительно нуждается в enumerateSupportedTypes() вызове. Я надеюсь, что эта рецензия сэкономит время, которое я потратил на кого-то еще. - person O. Jones; 22.10.2020