【问题标题】:How to stop pixelated artifacts from mediarecorder?如何阻止来自 mediarecorder 的像素化伪影?
【发布时间】:2021-03-19 17:09:07
【问题描述】:

我们正在使用浏览器的 MediaRecorder 来记录用户的摄像头。我不明白为什么有些相机会经常记录伪影。并非所有相机都会发生这种情况。

这里是发生的一些截图......

这是视频中的正常图像

然后在一瞬间,它会被像素化,然后又回到看起来像以前的图像。

以下是包含此工件的视频的摘录 https://drive.google.com/file/d/1SYMBRjMlvOTO-LnlG5HLX0ncN3NyUXcc/view?usp=sharing

recorder = new MediaRecorder(local_media_stream, {
           mimeType: encoding_options,
           audioBitsPerSecond: 96000,
           videoBitsPerSecond: 8000000,
         });
         recorder.ondataavailable = function(e) {
             that.save_blob(e.data, blob_index);
             blob_index++;
         }
         recorder.start(15000)

对于local_media_stream,我只是抓取本地音视频

    navigator.mediaDevices.getUserMedia({ audio: {
        deviceId: { exact: currentMic.deviceId},
        channelCount: 1,
        noiseSuppression: options.echo_cancellation,
        echoCancellation: options.echo_cancellation,
      },
       video: {
         width: { ideal: $("#subscription_id").data("max-width") },
         height: { ideal: $("#subscription_id").data("max-height") },
         frameRate: 30,
         deviceId: { exact: currentCam.deviceId }
       }
     })

【问题讨论】:

    标签: video-capture getusermedia video-recording web-mediarecorder


    【解决方案1】:

    创建这些视频压缩伪影的通常不是相机。它们具有视频压缩的性质,并且在某种程度上取决于计算机的功能。大多数视频帧是所谓的“帧间”,保存一帧和下一帧之间的压缩差异。解码一个帧间需要解码它之前的所有帧。

    这些帧间序列以“帧内”开始,也称为瞬时解码器刷新 (IDR) 帧。内帧可以单独解码。但是有一个折衷:它们需要更多的压缩视频数据。

    当您要求 30 帧/秒时,您会隐含限制每帧可以容纳多少数据。有时帧内需要降低其质量,以便其数据适合时间间隔。

    我的观点:你看到的块状是帧内。

    你能做些什么呢?老实说,MediaRecorder 并没有对视频编码器的工作方式进行太多控制。所以,你可以调整的东西是相当小的。它们是:

    • 框架尺寸:考虑将其缩小。 1080p 视频 (1920x1080) 可能太大了。尝试更小的东西。试试 960x540,甚至更小。

    • 帧速率:较慢的帧速率,例如 15,为每个帧分配更多带宽,因此帧内帧的质量更高。降低帧速率。

    • 比特率。您正在使用 8 兆位/秒。这对于基于浏览器的编码器来说非常大。可能太大了。它比许多互联网服务提供商的最大上传速率更快。尝试更小的东西。从 1 兆位开始。 (您的高比特率要求可能会使某些计算机的压缩硬件不堪重负。)

    请记住,为在线流媒体压缩视频的人使用大型服务器,并且在这些服务器上压缩一分钟的视频可能需要十分钟或更长时间。他们经常使用ffmpeg,它有数百种调整压缩的方法。 MediaRecorder 实时进行。

    此外,网络摄像头硬件的质量参差不齐。糟糕的网络摄像头有用于镜头的可乐瓶碎片和糟糕的传感器。好的是非常好的。没有一个符合专业视频设备的标准。但是这种设备要花费数千美元。

    而且,请记住,压缩视频更类似于 JPEG,而不是类似于 PNG。它不适合编码高对比度的静态图片。

    高质量的数字视频录制是计算的一个成熟的子专业。如果您想要“尽可能最好的音频和视频”,您将不会使用网络浏览器/Javascript/getUserMedia/MediaRecorder。您将使用像 OBS Studio 这样的本机(已下载并安装)应用程序。它使您可以更好地控制捕获和压缩过程。

    如果您在 2021 年初使用嵌入在浏览器中的捕获/压缩技术,实际上您将被限制在每秒几兆比特和一些分辨率限制。

    【讨论】:

    • MediaRecorder 是否有压缩功能?有没有办法知道这是否会发生,然后相应地降低它们的设置?我正在尝试从这些人的网络摄像头/摄像头录制最好的音频和视频。这就是为什么我有大帧大小、大比特率和高帧率的原因。
    • MediaRecorder 的全部目的是压缩。
    • 那是用浏览器记录的唯一方法吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2020-05-09
    • 2013-02-25
    • 1970-01-01
    相关资源
    最近更新 更多