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

5.6 KiB
Raw Permalink Blame History

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. 运行应用

应用启动时会自动:

  1. 检查系统 PATH 中的 ffmpeg
  2. 如果未找到,从嵌入的资源中提取到临时目录
  3. 使用提取的二进制文件

工作原理

嵌入过程

// main.go
//go:embed resources/ffmpeg
var embeddedFFmpeg embed.FS

这行代码会在编译时将所有 resources/ffmpeg/ 目录下的文件嵌入到程序中。

运行时提取

应用首次启动时:

  1. 检查系统是否有 ffmpeg
  2. 如果没有,从嵌入的文件系统中查找匹配的二进制文件
  3. 提取到临时目录:{临时目录}/videoconcat-ffmpeg/{进程ID}/
  4. 设置执行权限
  5. 使用提取的文件

文件查找顺序

  1. resources/ffmpeg/ffmpegresources/ffmpeg/ffmpeg.exe
  2. resources/ffmpeg/{GOOS}/ffmpegresources/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 忽略。如果需要提交:

# 方法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

检查清单:

  1. 确认二进制文件已放置在 wails/resources/ffmpeg/ 目录
  2. 检查文件名是否正确Windows 需要 .exe 后缀)
  3. 检查文件权限macOS/Linux
  4. 查看应用日志,查找详细的错误信息

问题:权限被拒绝

解决方案:

chmod +x wails/resources/ffmpeg/ffmpeg
chmod +x wails/resources/ffmpeg/ffprobe

问题:提取失败

可能原因:

  • 临时目录不可写
  • 磁盘空间不足
  • 文件损坏

检查:

  • 查看应用日志
  • 检查临时目录权限和空间