VideoConcat/wails/resources/ffmpeg/使用说明.md
2026-01-08 13:25:06 +08:00

221 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FFmpeg 嵌入使用说明
## 快速开始
### 1. 下载 FFmpeg 二进制文件
根据你的目标平台下载对应的 FFmpeg 静态构建版本,并放置到对应的平台目录下:
**重要**:使用平台特定目录组织,编译时会自动只嵌入对应平台的版本。
#### macOS (Apple Silicon 或 Intel)
```bash
# 使用 Homebrew 安装(推荐)
brew install ffmpeg
# 复制到 macOS 专用目录
cp /opt/homebrew/bin/ffmpeg wails/resources/ffmpeg/darwin/ffmpeg
cp /opt/homebrew/bin/ffprobe wails/resources/ffmpeg/darwin/ffprobe
# 或者如果是 Intel Mac
cp /usr/local/bin/ffmpeg wails/resources/ffmpeg/darwin/ffmpeg
cp /usr/local/bin/ffprobe wails/resources/ffmpeg/darwin/ffprobe
# 设置权限
chmod +x wails/resources/ffmpeg/darwin/ffmpeg
chmod +x wails/resources/ffmpeg/darwin/ffprobe
```
**或者下载静态构建版本:**
```bash
# Apple Silicon
wget https://evermeet.cx/ffmpeg/ffmpeg-6.1.zip
unzip ffmpeg-6.1.zip
cp ffmpeg wails/resources/ffmpeg/darwin/ffmpeg
cp ffprobe wails/resources/ffmpeg/darwin/ffprobe
chmod +x wails/resources/ffmpeg/darwin/ffmpeg wails/resources/ffmpeg/darwin/ffprobe
```
#### Windows
```powershell
# 下载
# 访问 https://www.gyan.dev/ffmpeg/builds/
# 下载 ffmpeg-release-essentials.zip
# 解压后复制 bin 目录下的文件到 windows 目录
copy ffmpeg.exe wails\resources\ffmpeg\windows\ffmpeg.exe
copy ffprobe.exe wails\resources\ffmpeg\windows\ffprobe.exe
```
#### Linux
```bash
# 下载静态构建版本
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-*-amd64-static
# 复制到 Linux 专用目录
cp ffmpeg ../../wails/resources/ffmpeg/linux/ffmpeg
cp ffprobe ../../wails/resources/ffmpeg/linux/ffprobe
chmod +x ../../wails/resources/ffmpeg/linux/ffmpeg
chmod +x ../../wails/resources/ffmpeg/linux/ffprobe
```
### 2. 编译应用
二进制文件会在编译时根据目标平台自动选择并嵌入:
```bash
cd wails
# 在 macOS 上编译 macOS 版本(只嵌入 darwin/ 目录的文件)
go build -o VideoConcat
# 交叉编译 Windows 版本(只嵌入 windows/ 目录的文件)
GOOS=windows GOARCH=amd64 go build -o VideoConcat.exe
# 交叉编译 Linux 版本(只嵌入 linux/ 目录的文件)
GOOS=linux GOARCH=amd64 go build -o VideoConcat
```
**优势**
- ✅ macOS 版本只包含 macOS 的 FFmpeg体积更小
- ✅ Windows 版本只包含 Windows 的 FFmpeg体积更小
- ✅ 交叉编译时不会混入其他平台的二进制文件
### 3. 运行应用
应用启动时会自动:
1. 检查系统 PATH 中的 ffmpeg
2. 如果未找到,从嵌入的资源中提取到临时目录
3. 使用提取的二进制文件
## 工作原理
### 嵌入过程
```go
// main.go
//go:embed resources/ffmpeg
var embeddedFFmpeg embed.FS
```
这行代码会在编译时将所有 `resources/ffmpeg/` 目录下的文件嵌入到程序中。
### 运行时提取
应用首次启动时:
1. 检查系统是否有 ffmpeg
2. 如果没有,从嵌入的文件系统中查找匹配的二进制文件
3. 提取到临时目录:`{临时目录}/videoconcat-ffmpeg/{进程ID}/`
4. 设置执行权限
5. 使用提取的文件
### 文件查找顺序
1. `resources/ffmpeg/ffmpeg``resources/ffmpeg/ffmpeg.exe`
2. `resources/ffmpeg/{GOOS}/ffmpeg``resources/ffmpeg/{GOOS}/ffmpeg.exe`
3. `resources/ffmpeg/{GOOS}_{GOARCH}/ffmpeg`
## 目录结构示例
### ⭐ 推荐:按平台组织(自动平台选择)
```
wails/resources/ffmpeg/
├── darwin/ # macOS 版本
│ ├── ffmpeg
│ └── ffprobe
├── windows/ # Windows 版本
│ ├── ffmpeg.exe
│ └── ffprobe.exe
├── linux/ # Linux 版本
│ ├── ffmpeg
│ └── ffprobe
└── README.md
```
**编译行为**
- 在 macOS 上编译 → 只嵌入 `darwin/` 目录
- 在 Windows 上编译 → 只嵌入 `windows/` 目录
- 在 Linux 上编译 → 只嵌入 `linux/` 目录
### 向后兼容:单目录结构
```
wails/resources/ffmpeg/
├── ffmpeg # 当前平台的 ffmpeg不推荐
├── ffprobe # 当前平台的 ffprobe
└── README.md
```
**注意**:这种方式会嵌入所有文件,不推荐使用。
## 注意事项
### 文件大小
- FFmpeg 静态构建版本通常 50-200 MB
- 嵌入后会增加最终可执行文件的大小
- 考虑使用 LZMA 压缩或分平台构建来减小体积
### Git 提交
默认情况下,二进制文件被 `.gitignore` 忽略。如果需要提交:
```bash
# 方法1强制添加
git add -f wails/resources/ffmpeg/ffmpeg
# 方法2修改 .gitignore不推荐文件太大
```
### 权限问题
在 macOS/Linux 上,确保文件有执行权限:
```bash
chmod +x wails/resources/ffmpeg/ffmpeg
chmod +x wails/resources/ffmpeg/ffprobe
```
### 临时文件清理
提取的文件保存在临时目录中。如果进程异常退出,可能需要手动清理:
```bash
# macOS/Linux
rm -rf /tmp/videoconcat-ffmpeg
# Windows
rd /s /q %TEMP%\videoconcat-ffmpeg
```
## 故障排查
### 问题:找不到 ffmpeg
**检查清单:**
1. 确认二进制文件已放置在 `wails/resources/ffmpeg/` 目录
2. 检查文件名是否正确Windows 需要 `.exe` 后缀)
3. 检查文件权限macOS/Linux
4. 查看应用日志,查找详细的错误信息
### 问题:权限被拒绝
**解决方案:**
```bash
chmod +x wails/resources/ffmpeg/ffmpeg
chmod +x wails/resources/ffmpeg/ffprobe
```
### 问题:提取失败
**可能原因:**
- 临时目录不可写
- 磁盘空间不足
- 文件损坏
**检查:**
- 查看应用日志
- 检查临时目录权限和空间