Как сжать видео с веб-камеры, записанное с помощью html5 MediaRecorder api?

Я успешно записал свою веб-камеру с помощью MediaRecorder api, и полученные размеры файлов оказались слишком большими для их качества.

Например, для 8-секундного видео размером 480x640 я получил размер файла 1 МБ. Это не кажется правильным.

Мой код для записи ()

navigator.mediaDevices.getUserMedia({video: true, audio: true})
    .then(function(stream){
        var options = {
            mimeType : "video/webm;codecs=vp9"
            //I don't set bitrate here even if I do the quality is too bad
        }
        var media_recorder = new MediaRecorder(media_stream, options);
        var recorded_data = [];
        media_recorder.ondataavailable = function(e){
             recorded_data.push(e.data);
        }
        media_recorder.onstop = function(e){
            recorded_data.push(e.data);
            var recorded_blob = new Blob(recorded_data, { 'type' : 'video/webm; codecs=vp9' });
            var recorded_video_url = window.URL.createObjectURL(recorded_blob);
            //here I write some code to download the blob from this url through a href
        }
    })

Файл, полученный этим методом, неоправданно большой, что заставляет меня задаться вопросом, был ли он вообще сжат при кодировании с помощью VP9? 7-секундное видео - это около 870 КБ!

Просмотр файла с помощью инструмента mediainfo дает мне

General
Count                                    : 323
Count of stream of this kind             : 1
Kind of stream                           : General
Kind of stream                           : General
Stream identifier                        : 0
Count of video streams                   : 1
Count of audio streams                   : 1
Video_Format_List                        : VP9
Video_Format_WithHint_List               : VP9
Codecs Video                             : V_VP9
Video_Language_List                      : English
Audio_Format_List                        : Opus
Audio_Format_WithHint_List               : Opus
Audio codecs                             : Opus
Audio_Language_List                      : English
Complete name                            : recorded_video.webm
File name                                : recorded_video
File extension                           : webm
Format                                   : WebM
Format                                   : WebM
Format/Url                               : http://www.webmproject.org/
Format/Extensions usually used           : webm
Commercial name                          : WebM
Format version                           : Version 2
Internet media type                      : video/webm
Codec                                    : WebM
Codec                                    : WebM
Codec/Url                                : http://www.webmproject.org/
Codec/Extensions usually used            : webm
File size                                : 867870
File size                                : 848 KiB
File size                                : 848 KiB
File size                                : 848 KiB
File size                                : 848 KiB
File size                                : 847.5 KiB
File last modification date              : UTC 2017-05-19 05:48:00
File last modification date (local)      : 2017-05-19 17:48:00
Writing application                      : Chrome
Writing application                      : Chrome
Writing library                          : Chrome
Writing library                          : Chrome
IsTruncated                              : Yes

Video
Count                                    : 332
Count of stream of this kind             : 1
Kind of stream                           : Video
Kind of stream                           : Video
Stream identifier                        : 0
StreamOrder                              : 1
ID                                       : 2
ID                                       : 2
Unique ID                                : 62101435245162993
Format                                   : VP9
Commercial name                          : VP9
Codec ID                                 : V_VP9
Codec ID/Url                             : http://www.webmproject.org/
Codec                                    : V_VP9
Codec                                    : V_VP9
Width                                    : 640
Width                                    : 640 pixels
Height                                   : 480
Height                                   : 480 pixels
Pixel aspect ratio                       : 1.000
Display aspect ratio                     : 1.333
Display aspect ratio                     : 4:3
Frame rate mode                          : VFR
Frame rate mode                          : Variable
Language                                 : en
Language                                 : English
Language                                 : English
Language                                 : en
Language                                 : eng
Language                                 : en
Default                                  : Yes
Default                                  : Yes
Forced                                   : No
Forced                                   : No

Audio
Count                                    : 272
Count of stream of this kind             : 1
Kind of stream                           : Audio
Kind of stream                           : Audio
Stream identifier                        : 0
StreamOrder                              : 0
ID                                       : 1
ID                                       : 1
Unique ID                                : 32224324715799545
Format                                   : Opus
Format/Url                               : http://opus-codec.org/
Commercial name                          : Opus
Internet media type                      : audio/opus
Codec ID                                 : A_OPUS
Codec ID/Url                             : http://opus-codec.org
Codec                                    : Opus
Codec                                    : Opus
Codec/Family                             : PCM
Channel(s)                               : 1
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Channel positions                        : 1/0/0
Sampling rate                            : 48000
Sampling rate                            : 48.0 KHz
Compression mode                         : Lossy
Compression mode                         : Lossy
Delay                                    : 718
Delay                                    : 718ms
Delay                                    : 718ms
Delay                                    : 718ms
Delay                                    : 00:00:00.718
Delay, origin                            : Container
Delay, origin                            : Container
Language                                 : en
Language                                 : English
Language                                 : English
Language                                 : en
Language                                 : eng
Language                                 : en
Default                                  : Yes
Default                                  : Yes
Forced                                   : No
Forced                                   : No

Что я сделал не так? Нужно ли мне перекодировать его после добавления кусков? Есть какой-то атрибут, который мне не хватает? Предполагается, что VP9 резко уменьшит размер файлов.


person JasonY    schedule 19.05.2017    source источник


Ответы (1)


Однопроходный кодировщик Chrome VP9 для видео, захваченного через Media Recorder API, - это не то место, где вы увидите существенные различия между VP9 и H.264.

При записи видео с веб-камеры качество веб-камеры, доступный свет и то, что вы записываете, имеют большее влияние, чем то, какой видеокодек вы используете:

  • низкая освещенность => низкая частота кадров => более низкий битрейт
  • но шум в условиях низкой освещенности намного сложнее эффективно кодировать
  • лучшие веб-камеры собирают больше данных с меньшим шумом при любом освещении
  • говорящим головам нужен более низкий битрейт, чем при большом количестве движений

Но 1 МБ на каждые 8-10 секунд при 640x480 30 кадров в секунду соответствует моим выводам. Я использовал эту демонстрацию, которая пытается использовать VP9, ​​H.264 и VP8 (в этот заказ).

Предполагается, что VP9 резко уменьшит размер файлов.

По сравнению с H.264 VP9 делает уменьшите размер примерно на 30%, но чтобы увидеть уменьшение, вам нужно использовать двухпроходное кодирование, очень хороший кодировщик (они разные) и большую мощность процессора. Процесс также займет значительно больше времени.

person Octavian Naicu    schedule 25.05.2017