首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >webRTC使用ffmpeg.js将webm转换为mp4

webRTC使用ffmpeg.js将webm转换为mp4
EN

Stack Overflow用户
提问于 2017-06-06 21:56:26
回答 1查看 19.4K关注 0票数 12

我正在尝试使用ffmpeg.js将webM文件转换为mp4。我正在录制一段来自画布的视频(覆盖一些信息),并从视频录制音频数据。

代码语言:javascript
运行
复制
stream = new MediaStream();
var videoElem = document.getElementById('video');
var videoStream = videoElem.captureStream();
stream.addTrack(videoStream.getAudioTracks()[0]);
stream.addTrack(canvas.captureStream().getVideoTracks()[0]);
var options = {mimeType: 'video/webm'};
  recordedBlobs = [];
  mediaRecorder = new MediaRecorder(stream, options);
  mediaRecorder.onstop = handleStop;
  mediaRecorder.ondataavailable = handleDataAvailable;
  mediaRecorder.start(100); // collect 100ms of data

function handleDataAvailable(event) {
  if (event.data && event.data.size > 0) {
    recordedBlobs.push(event.data);
  }
}
mediaRecorder.stop();

此代码按预期工作,并返回webm视频

代码语言:javascript
运行
复制
var blob = new Blob(recordedBlobs, {type: 'video/webm'});

现在我需要一个mp4文件,并检查来自muaz-khan的ffmpeg.js。下面的示例展示了当您有两个流(音频和视频)时,如何转换为mp4。但我有一个带有附加音轨的流。我可以将这样的流转换为mp4吗?如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 03:16:55

根据提供的代码示例,您的记录器流只有一个音频&一个视频轨道。

如果您的输入文件同时具有音频和视频,则需要为两个曲目here指定输出编解码器,如下所示。

代码语言:javascript
运行
复制
worker.postMessage({
    type: 'command',
    arguments: [
       '-i', 'audiovideo.webm',
       '-c:v', 'mpeg4',
       '-c:a', 'aac', // or vorbis
       '-b:v', '6400k',  // video bitrate
       '-b:a', '4800k',  // audio bitrate
       '-strict', 'experimental', 'audiovideo.mp4'
     ],
    files: [
        {
            data: new Uint8Array(fileReaderData),
            name: 'audiovideo.webm'
        }
     ]
    });

不推荐在浏览器中对视频进行

转码,因为它会消耗更多的CPU时间和内存。而且ffmpeg_asm.js很重。可能可以用于POC :)

你的用例是什么?webm(vp8/vp9)如今被广泛使用。

Chrome将支持以下mime类型:

代码语言:javascript
运行
复制
"video/webm"
"video/webm;codecs=vp8"
"video/webm;codecs=vp9"
"video/webm;codecs=h264"
"video/x-matroska;codecs=avc1"

所以你可以直接从chrome MediaRecorder获取mp4记录,方法如下

代码语言:javascript
运行
复制
var options = {mimeType: 'video/webm;codecs=h264'}; 
mediaRecorder = new MediaRecorder(stream, options);
.....
//Before merging blobs change output mime 
var blob = new Blob(recordedBlobs, {type: 'video/mp4'});
// And name your file as video.mp4
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44392027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档