videoconverter.js 浏览器上使用js进行视频格式转换,支持视频转mp4、gif,视频截图


videoconverter.js 浏览器上使用js进行视频格式转换,支持视频转mp4、gif,视频截图等操作

此库依赖 ffmpeg.js (大概24.1 MB ,使用gzip大概6MB),ffmpeg-all-codecs.js(大概27.5 MB gzip后 6.9 MB)

此插件只暴露一个方法

var results = ffmpeg_run({
  arguments: [string],
  files: [
    {
      data: UInt8Array,
      name: string
    }
  ]
});

// results is an Array of { data: UInt8Array, name: string }
results.forEach(function(file) {
  console.log("File recieved", file.name, file.data);
});

我们可以通过worker来执行,注意ffmpeg.js为了防止阻塞主线程,不能通过script加载,只能通过worker

importScripts('ffmpeg.js');

function print(text) {
  postMessage({
    'type' : 'stdout',
    'data' : text
  });
}

onmessage = function(event) {
  var module = {
    files: event.data.files || [],
    arguments: event.data.arguments || [],
    print: print,
    printErr: print
  };
  postMessage({
    'type' : 'start',
    'data' : module.arguments
  });
  var result = ffmpeg_run(module);
  postMessage({
    'type' : 'done',
    'data' : result
  });
};

postMessage({
  'type' : 'ready'
});

页面调用方式

var worker = new Worker("worker.js");
worker.onmessage = function (event) {
  var message = event.data;
  if (message.type == "ready") {
    outputElement.textContent = "Loaded";
    worker.postMessage({
      type: 'command',
      arguments: ['-help']
    })
  } else if (message.type == "stdout") {
    outputElement.textContent += message.data + "\n";
  } else if (message.type == "start") {
    outputElement.textContent = "Worker has received command\n";
  }
};

完整的示例请看官方demo https://bgrins.github.io/videoconverter.js/demo/
立即下载videoconverter.js查看所有js插件

网友评论0

程序员在线工具箱