5.6 KiB
5.6 KiB
FFmpeg 嵌入使用说明
快速开始
1. 下载 FFmpeg 二进制文件
根据你的目标平台下载对应的 FFmpeg 静态构建版本,并放置到对应的平台目录下:
重要:使用平台特定目录组织,编译时会自动只嵌入对应平台的版本。
macOS (Apple Silicon 或 Intel)
# 使用 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
或者下载静态构建版本:
# 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
# 下载
# 访问 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
# 下载静态构建版本
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. 编译应用
二进制文件会在编译时根据目标平台自动选择并嵌入:
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. 运行应用
应用启动时会自动:
- 检查系统 PATH 中的 ffmpeg
- 如果未找到,从嵌入的资源中提取到临时目录
- 使用提取的二进制文件
工作原理
嵌入过程
// main.go
//go:embed resources/ffmpeg
var embeddedFFmpeg embed.FS
这行代码会在编译时将所有 resources/ffmpeg/ 目录下的文件嵌入到程序中。
运行时提取
应用首次启动时:
- 检查系统是否有 ffmpeg
- 如果没有,从嵌入的文件系统中查找匹配的二进制文件
- 提取到临时目录:
{临时目录}/videoconcat-ffmpeg/{进程ID}/ - 设置执行权限
- 使用提取的文件
文件查找顺序
resources/ffmpeg/ffmpeg或resources/ffmpeg/ffmpeg.exeresources/ffmpeg/{GOOS}/ffmpeg或resources/ffmpeg/{GOOS}/ffmpeg.exeresources/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 忽略。如果需要提交:
# 方法1:强制添加
git add -f wails/resources/ffmpeg/ffmpeg
# 方法2:修改 .gitignore(不推荐,文件太大)
权限问题
在 macOS/Linux 上,确保文件有执行权限:
chmod +x wails/resources/ffmpeg/ffmpeg
chmod +x wails/resources/ffmpeg/ffprobe
临时文件清理
提取的文件保存在临时目录中。如果进程异常退出,可能需要手动清理:
# macOS/Linux
rm -rf /tmp/videoconcat-ffmpeg
# Windows
rd /s /q %TEMP%\videoconcat-ffmpeg
故障排查
问题:找不到 ffmpeg
检查清单:
- 确认二进制文件已放置在
wails/resources/ffmpeg/目录 - 检查文件名是否正确(Windows 需要
.exe后缀) - 检查文件权限(macOS/Linux)
- 查看应用日志,查找详细的错误信息
问题:权限被拒绝
解决方案:
chmod +x wails/resources/ffmpeg/ffmpeg
chmod +x wails/resources/ffmpeg/ffprobe
问题:提取失败
可能原因:
- 临时目录不可写
- 磁盘空间不足
- 文件损坏
检查:
- 查看应用日志
- 检查临时目录权限和空间