VideoConcat/wails/resources/ffmpeg/README.md
2026-01-08 13:25:06 +08:00

159 lines
5.4 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 二进制文件放置说明
此目录用于存放 FFmpeg 和 FFprobe 的二进制文件。这些文件会被**嵌入到 Go 程序**中,随应用一起分发。
**重要**:二进制文件会被编译到最终的可执行文件中,因此文件大小会增加。建议使用静态构建版本以减小体积。
## 目录结构
### ⭐ 推荐:按平台组织(实现自动平台选择)
```
resources/
└── ffmpeg/
├── darwin/ # macOS 版本(编译 macOS 时自动嵌入)
│ ├── ffmpeg
│ └── ffprobe
├── windows/ # Windows 版本(编译 Windows 时自动嵌入)
│ ├── ffmpeg.exe
│ └── ffprobe.exe
└── linux/ # Linux 版本(编译 Linux 时自动嵌入)
├── ffmpeg
└── ffprobe
```
**优势**
- ✅ 每个平台只嵌入对应平台的二进制文件
- ✅ 减小最终可执行文件大小
- ✅ 避免跨平台打包时的混乱
- ✅ 使用 Go 构建标签自动选择
### 选项 2所有平台通用向后兼容
```
resources/
└── ffmpeg/
├── ffmpeg # 当前平台的 ffmpegmacOS/Linux
├── ffmpeg.exe # 或 Windows 版本
├── ffprobe # 当前平台的 ffprobemacOS/Linux
└── ffprobe.exe # 或 Windows 版本
```
**注意**:这种方式会嵌入所有文件,增加不必要的体积。
## 获取 FFmpeg 二进制文件
### macOS
```bash
# 使用 Homebrew 安装
brew install ffmpeg
# 复制到资源目录
cp /opt/homebrew/bin/ffmpeg resources/ffmpeg/ffmpeg
cp /opt/homebrew/bin/ffprobe resources/ffmpeg/ffprobe
# 或者如果是 Intel Mac
cp /usr/local/bin/ffmpeg resources/ffmpeg/ffmpeg
cp /usr/local/bin/ffprobe resources/ffmpeg/ffprobe
```
### Windows
1. 下载 FFmpeg Windows 构建版本:
- 访问 https://www.gyan.dev/ffmpeg/builds/
- 下载 ffmpeg-release-essentials.zip
- 解压后找到 `bin` 目录下的 `ffmpeg.exe``ffprobe.exe`
2. 复制到资源目录:
```powershell
copy ffmpeg.exe resources\ffmpeg\ffmpeg.exe
copy ffprobe.exe resources\ffmpeg\ffprobe.exe
```
### Linux
```bash
# Ubuntu/Debian
sudo apt-get install ffmpeg
# 复制到资源目录
cp /usr/bin/ffmpeg resources/ffmpeg/ffmpeg
cp /usr/bin/ffprobe resources/ffmpeg/ffprobe
```
或者下载静态构建版本:
```bash
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xf ffmpeg-release-amd64-static.tar.xz
cp ffmpeg-*-amd64-static/ffmpeg resources/ffmpeg/ffmpeg
cp ffmpeg-*-amd64-static/ffprobe resources/ffmpeg/ffprobe
```
## 注意事项
1. **文件权限**:在 macOS/Linux 上,确保二进制文件有执行权限:
```bash
chmod +x resources/ffmpeg/ffmpeg
chmod +x resources/ffmpeg/ffprobe
```
2. **架构匹配**
- macOS确保使用正确的架构Intel 或 Apple Silicon
- Linux确保使用正确的架构amd64、arm64 等)
3. **依赖库**:静态构建版本通常更好,因为不需要外部依赖库。
4. **打包时**:在打包应用时,确保将此目录的内容包含到应用包中。
## 应用程序查找顺序
1. **系统 PATH**:首先检查系统 PATH 中是否有 ffmpeg/ffprobe
2. **嵌入资源**:如果未找到,从嵌入的 Go 资源中提取并解压到临时目录
3. **文件系统资源**:最后尝试从打包的资源目录查找(如果嵌入资源未找到)
## 嵌入和使用方式
### 工作原理
1. **编译时**
- 使用 Go 构建标签build tags根据目标平台自动选择嵌入文件
- macOS 构建时:只嵌入 `resources/ffmpeg/darwin/*`
- Windows 构建时:只嵌入 `resources/ffmpeg/windows/*`
- Linux 构建时:只嵌入 `resources/ffmpeg/linux/*`
2. **运行时**:首次使用时,从嵌入的文件系统中提取二进制文件到临时目录
3. **缓存**:提取的文件会缓存在临时目录中,避免重复提取
### 构建标签说明
项目使用以下文件实现平台特定嵌入:
- `ffmpeg_darwin.go` - macOS 平台(使用 `//go:build darwin`
- `ffmpeg_windows.go` - Windows 平台(使用 `//go:build windows`
- `ffmpeg_linux.go` - Linux 平台(使用 `//go:build linux`
- `ffmpeg_default.go` - 其他平台(向后兼容)
编译时Go 会自动只编译匹配当前平台的文件,因此:
- 在 macOS 上编译 → 只嵌入 darwin 目录的文件
- 在 Windows 上编译 → 只嵌入 windows 目录的文件
- 在 Linux 上编译 → 只嵌入 linux 目录的文件
### 注意事项
- **文件大小**:二进制文件会被嵌入到最终可执行文件中,会增加程序大小
- **首次运行**:首次运行时需要提取二进制文件,可能会有短暂的延迟
- **临时目录**:提取的文件保存在 `{临时目录}/videoconcat-ffmpeg/{进程ID}/`
- **权限**提取的文件会自动设置执行权限Unix 系统)
- **清理**:临时文件在程序退出后通常会被系统清理,但进程异常退出时可能需要手动清理
## Git 提交注意事项
默认情况下,`.gitignore` 已配置忽略二进制文件。如果需要将二进制文件提交到 Git
1. 移除 `.gitignore` 中的相关规则,或
2. 使用 `git add -f` 强制添加
**注意**:二进制文件通常很大(几十到几百 MB可能不适合提交到 Git。建议使用构建脚本在编译时自动下载。