前端如何做视频压缩?

上传视频是,需要对视频做压缩处理,不然上传体积太大了,有好的方式吗?

阅读 552
1 个回答

使用@ffmpeg/ffmpeg这个库即可
https://www.npmjs.com/package/@ffmpeg/ffmpeg
https://github.com/ffmpegwasm/ffmpeg.wasm

import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';

const ffmpeg = createFFmpeg({ log: true });

async function compressVideo(inputFile, outputQuality = 23) {
  if (!ffmpeg.isLoaded()) {
    await ffmpeg.load();
  }

  // 将输入视频写入 ffmpeg 内部文件系统
  ffmpeg.FS('writeFile', 'input.mp4', await fetchFile(inputFile));

  // 使用 h264 编码压缩视频
  await ffmpeg.run(
    '-i', 'input.mp4',
    '-vcodec', 'libx264',
    '-crf', outputQuality.toString(), // 控制视频质量(0-51,默认23,数值越大压缩率越高)
    '-preset', 'fast',
    'output.mp4'
  );

  // 读取输出文件
  const data = ffmpeg.FS('readFile', 'output.mp4');
  const compressedVideo = new Blob([data.buffer], { type: 'video/mp4' });
  
  return URL.createObjectURL(compressedVideo);
}

export default compressVideo;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题