js版ffmpeg压缩视频以及去除背景音乐
ffmepg地址: 这个是网上编译好的,功能还挺多的,我自己不会编译,只能用别人的
用法也挺简单的:
<h3>视频前端压缩</h3> <video id="output-video" controls></video><br/> <input type="file" id="uploader"> <p id="message"></p>
引入:
<script src="https://unpkg.com/@ffmpeg/ffmpeg@0.9.5/dist/ffmpeg.min.js"></script> <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
调用:
<script>
const {
createFFmpeg, fetchFile } = FFmpeg;
const message = document.getElementById(message);
const ffmpeg = createFFmpeg({
log: true,
progress: ({
ratio }) => {
message.innerHTML = `完成率: ${
(ratio * 100.0).toFixed(2)}%`;
},
});
const transcode = async ({
target: {
files } }) => {
const {
name } = files[0];
message.innerHTML = 正在加载 ffmpeg-core.js;
await ffmpeg.load();
message.innerHTML = 开始压缩;
ffmpeg.FS(writeFile, name, await fetchFile(files[0]));
// -b,2000000 值越小 压缩率越大
await ffmpeg.run(-i, name,-b,2000000,output.mp4);
message.innerHTML = 压缩完成;
const data = ffmpeg.FS(readFile, output.mp4);
const video = document.getElementById(output-video);
video.src = URL.createObjectURL(new Blob([data.buffer], {
type: video/mp4
}));
}
document.getElementById(uploader).addEventListener(change, transcode);
</script>
注:-b,2000000,通过修改比特率来达到压缩视频的效果,2000000,这个压缩效果很不错,亲测 还可以用 -crf 方式压缩,设置 -qscale质量参数压缩视频,不过这种方式只支持x264 ffmepg命令参数说明: 视频倒放:await ffmpeg.run(-i, name,-vf, "reverse",output.mp4); 视频剪切: await ffmpeg.run(-ss,00:00:00,-t,00:00:05,-i, name,-vcodec, "copy","-acodec","copy",output.mp4); 还有很多操作,可以自己尝试一下
去除视频背景音乐: 只需将上面命令加上 ‘-an’ 去除音频 如:await ffmpeg.run(-i, name,-an,-b,2000000,output.mp4); 即可 效果还是可以的!
