前端如何做视频压缩?

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

阅读 754
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;
推荐问题