前端ffmpeg实现视频剪切
利用ffmpeg实现纯前端视频剪切
注意:在新版本Chrome浏览器中由于安全性问题,只能在https或localhost当中才能正常使用
1. 下载ffmpeg
npm install @ffmpeg/ffmpeg @ffmpeg/core
2. 文件引入及初始化
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
const ffmpeg = createFFmpeg();
// vue生命周期
created(): void {
if(!ffmpeg.isLoaded()) {
ffmpeg.load().catch((err) => {
console.log(err);
});
}
}
// 在代理中加入:
headers: {
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Embedder-Policy": "require-corp",
}
2. 上传文件
html
<el-upload
class="el-upload__video"
drag
:show-file-list="false"
:before-upload="uploadVideo"
accept="video/mp4,video/mkv"
>
<h1>视频在线剪切</h1>
</el-upload>
js
/*
* 上传
*/
public async uploadVideo (file: File) {
this.videoName = file.name
this.orgFileBuffer = await file.arrayBuffer() // 获取文件数据
ffmpeg.FS('writeFile', this.videoName, await fetchFile(new Blob([this.orgFileBuffer]))); // 将视频数据写入内存
this.videoUrl = URL.createObjectURL(new Blob([this.orgFileBuffer])); // 将视频数据转为url
return false
}
3. 播放
<video>
<source :src="videoUrl" type="video/mp4">
</video>
4. 剪切
// startCutTime开始剪切的时间
// endCutTime结束剪切的时间
// videoName要剪切的视频名
// TEM_FILE_NAME剪切完成后保存到内存的视频名称
await ffmpeg.run(
'-ss', `${this.startCutTime}`,
'-t', `${this.endCutTime - this.startCutTime}`,
'-i', this.videoName,
'-vcodec', 'copy',
'-acodec', 'copy', this.TEM_FILE_NAME)
let arrayBuffer = ffmpeg.FS('readFile', this.TEM_FILE_NAME).buffer // 读取缓存
this.videoUrl = URL.createObjectURL(new Blob([arrayBuffer]) // 转为Blob URL
作者:my-wl
出处:https://www.cnblogs.com/my-wl/p/16858178.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)