# ffmpeg-demo **Repository Path**: coder-kai/ffmpeg-demo ## Basic Information - **Project Name**: ffmpeg-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-26 - **Last Updated**: 2025-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FFmpeg 视频处理 Web 应用 > 创建时间:2025-11-26 11:18:34 一个基于 Node.js 和 FFmpeg 的 Web 视频处理系统,支持视频上传和多样化处理功能。 ## ✨ 功能特性 - 🎬 **视频格式转换**:支持 MP4、WebM、AVI、MOV 等格式转换 - ✂️ **视频裁剪**:按时间或区域裁剪视频 - 🖼️ **视频压缩**:可调节 CRF 值和分辨率进行压缩优化 - 🎨 **添加水印**:支持文字和图片水印 - 📸 **提取视频帧**:从视频中提取指定时间的帧为图片 - 🎵 **提取音频**:从视频中提取音频(MP3、AAC、WAV) - 🔄 **视频旋转**:90°、180°、270° 旋转 - 📏 **视频缩放**:调整视频分辨率 - 🎭 **视频滤镜**:亮度、对比度、饱和度、黑白、模糊等效果 ## 🚀 快速开始 ### 前置要求 1. **Node.js** (v14 或更高版本) 2. **FFmpeg** 已安装并配置在系统 PATH 中 #### 安装 FFmpeg **macOS:** ```bash brew install ffmpeg ``` **Windows:** 1. 访问 [FFmpeg 官网](https://ffmpeg.org/download.html) 下载 2. 解压并添加到系统 PATH **Linux (Ubuntu/Debian):** ```bash sudo apt update sudo apt install ffmpeg ``` ### 安装依赖 ```bash npm install ``` ### 启动服务 ```bash npm start ``` 开发模式(自动重启): ```bash npm run dev ``` 服务将在 `http://localhost:3000` 启动。 ## 📁 项目结构 ``` red-yellow-light/ ├── server.js # Express 服务器主文件 ├── services/ │ └── videoProcessor.js # FFmpeg 视频处理服务 ├── public/ │ ├── index.html # 前端页面 │ ├── style.css # 样式文件 │ └── app.js # 前端 JavaScript ├── uploads/ # 上传文件存储目录(自动创建) ├── output/ # 处理结果存储目录(自动创建) ├── package.json # 项目依赖配置 └── README.md # 项目说明文档 ``` ## 🎯 API 接口 ### 上传视频 ``` POST /api/upload Content-Type: multipart/form-data Body: video (file) ``` ### 获取视频信息 ``` GET /api/video/info/:fileId ``` ### 视频格式转换 ``` POST /api/video/convert Body: { fileId: string, format: 'mp4' | 'webm' | 'avi' | 'mov', quality: 'fast' | 'medium' | 'slow' } ``` ### 视频压缩 ``` POST /api/video/compress Body: { fileId: string, crf: number (18-28), resolution: string (可选,如 '1280x720') } ``` ### 视频裁剪 ``` POST /api/video/crop Body: { fileId: string, startTime: string (可选,如 '00:00:10'), duration: number (可选,秒), x: number (可选), y: number (可选), width: number (可选), height: number (可选) } ``` ### 视频合并 ``` POST /api/video/merge Body: { fileIds: string[] } ``` ### 添加水印 ``` POST /api/video/watermark Body: { fileId: string, watermarkPath: string (可选,图片文件ID), text: string (可选,文字水印), position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center', opacity: number (0-1) } ``` ### 提取视频帧 ``` POST /api/video/extract-frame Body: { fileId: string, time: string (如 '00:00:01'), width: number, height: number } ``` ### 提取音频 ``` POST /api/video/extract-audio Body: { fileId: string, format: 'mp3' | 'aac' | 'wav', bitrate: string (如 '192k') } ``` ### 视频旋转 ``` POST /api/video/rotate Body: { fileId: string, angle: number (90, -90, 180) } ``` ### 视频缩放 ``` POST /api/video/scale Body: { fileId: string, width: number, height: number, maintainAspectRatio: boolean } ``` ### 应用滤镜 ``` POST /api/video/filter Body: { fileId: string, filterType: 'brightness' | 'contrast' | 'saturation' | 'grayscale' | 'blur', filterParams: { value: number } } ``` ### 下载文件 ``` GET /api/download/:filename ``` ## 💻 使用示例 ### 1. 上传视频 在浏览器中打开 `http://localhost:3000`,点击上传区域选择视频文件,或直接拖拽文件到上传区域。 ### 2. 查看视频信息 上传成功后,系统会自动显示视频的详细信息,包括: - 时长 - 分辨率 - 帧率 - 编码格式 - 文件大小 ### 3. 处理视频 选择对应的处理功能标签页,设置参数后点击处理按钮即可。 ## 🔧 配置说明 ### 文件大小限制 默认最大上传文件大小为 500MB,可在 `server.js` 中修改: ```javascript limits: { fileSize: 500 * 1024 * 1024 // 500MB } ``` ### 端口配置 默认端口为 3000,可通过环境变量修改: ```bash PORT=8080 npm start ``` ## 📝 注意事项 1. **FFmpeg 安装**:确保 FFmpeg 已正确安装并可在命令行中使用 2. **文件存储**:上传和处理后的文件会保存在 `uploads/` 和 `output/` 目录 3. **性能考虑**:视频处理是 CPU 密集型操作,大文件处理可能需要较长时间 4. **存储空间**:确保有足够的磁盘空间存储上传和处理后的文件 ## 🐛 故障排除 ### FFmpeg 未找到 如果出现 "FFmpeg not found" 错误: 1. 确认 FFmpeg 已安装:`ffmpeg -version` 2. 检查系统 PATH 环境变量 3. 在代码中指定 FFmpeg 路径: ```javascript const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath('/path/to/ffmpeg'); ``` ### 处理失败 - 检查视频文件格式是否支持 - 确认文件没有损坏 - 查看服务器控制台的错误信息 ## 📚 相关文档 - [FFmpeg 官方文档](https://ffmpeg.org/documentation.html) - [fluent-ffmpeg GitHub](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg) - [Express.js 文档](https://expressjs.com/) ## 📄 许可证 MIT License --- **提示**:这是一个演示项目,生产环境使用请考虑添加: - 用户认证和授权 - 文件清理机制 - 任务队列系统(如 Bull) - 错误日志记录 - 性能监控