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

5.4 KiB
Raw Permalink Blame History

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

# 使用 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 构建版本:

  2. 复制到资源目录:

    copy ffmpeg.exe resources\ffmpeg\ffmpeg.exe
    copy ffprobe.exe resources\ffmpeg\ffprobe.exe
    

Linux

# Ubuntu/Debian
sudo apt-get install ffmpeg

# 复制到资源目录
cp /usr/bin/ffmpeg resources/ffmpeg/ffmpeg
cp /usr/bin/ffprobe resources/ffmpeg/ffprobe

或者下载静态构建版本:

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 上,确保二进制文件有执行权限:

    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。建议使用构建脚本在编译时自动下载。