1. FFmpeg环境搭建:工欲善其事,必先利其器

说实话,我见过太多人一上来就急着敲命令,结果环境没配好,折腾半天连个视频都转不出来。做字幕嵌入更是如此——你想想看,字幕流、编码器、滤镜链,哪个环节出问题都白搭。所以第一章,咱们先把地基打牢。

1.1 FFmpeg是什么?

FFmpeg,说白了就是一个跨平台的音视频处理瑞士军刀。它能转格式、能裁剪、能加滤镜、能嵌字幕——几乎你能想到的音视频操作,它都能干。

我个人习惯把它拆成三部分理解:

  • FFmpeg:命令行主程序,负责转码、滤镜、封装
  • FFplay:一个轻量播放器,用来快速预览效果
  • FFprobe:分析工具,查看媒体文件的详细信息

做字幕嵌入时,我们主要跟 FFmpeg 打交道。FFprobe 用来检查字幕流是否存在,FFplay 用来预览嵌入效果。这三个工具,咱们都得装上。

核心概念:FFmpeg 本身不生产音视频,它只是音视频的搬运工——但搬运过程中,它可以加字幕、改编码、调参数。字幕嵌入的本质,就是把字幕流"塞"进视频容器里,或者把字幕"烧"进画面像素里。

1.2 三平台安装指南

我在 Windows、macOS、Linux 上都部署过 FFmpeg,每个平台都有各自的坑。下面我把踩过的坑和最佳实践一并告诉你。

Windows 安装

Windows 用户最省心的方式,就是下载官方编译好的二进制包。

  1. 打开 ffmpeg.org/download.html,选择 Windows 版本
  2. 推荐下载 gyan.dev 或 BtbN 的完整构建版(full build)
  3. 解压到 C:\ffmpeg 目录
  4. 把 C:\ffmpeg\bin 添加到系统环境变量 Path 中

我的经验:别用 Windows 商店里的 FFmpeg,版本经常落后。我踩过这个坑——有一次项目急着用新版编码器,商店版死活不支持,最后还得手动装。

macOS 安装

macOS 上我推荐用 Homebrew,一行命令搞定:

brew install ffmpeg

如果你需要更多编码器支持,可以加参数:

brew install ffmpeg --with-libvorbis --with-libass --with-fdk-aac

嗯,这里要注意——--with-libass 这个参数特别重要。做字幕嵌入时,libass 负责渲染 ASS/SSA 字幕,没有它,很多字幕效果出不来。

Linux 安装

Linux 上最直接的是用包管理器:

发行版 安装命令
Ubuntu/Debian sudo apt install ffmpeg
CentOS/RHEL sudo yum install ffmpeg(需先启用 EPEL)
Arch Linux sudo pacman -S ffmpeg

避坑指南:我曾经在 Ubuntu 上直接用 apt 装,结果发现版本是 4.x 的,很多新特性不支持。后来我改用 static builds 或者 johnvansickle.com 的编译版本,才解决了问题。如果你需要最新特性,建议用静态编译版。

1.3 验证安装

装完之后,别急着跑。先验证一下环境是否正常:

ffmpeg -version

你会看到类似这样的输出:

ffmpeg version 6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 13.2.0 (GCC)
configuration: --enable-libass --enable-libfreetype --enable-libfontconfig
libavutil      58. 29.100 / 58. 29.100
libavcodec     60. 31.102 / 60. 31.102
libavformat    60. 16.100 / 60. 16.100
libavfilter     9. 12.100 /  9. 12.100
libswscale      7.  5.100 /  7.  5.100
libswresample   4. 12.100 /  4. 12.100

重点关注两件事:

  • 版本号:建议 5.0 以上,太老的版本很多字幕功能不完善
  • 编译参数:看有没有 --enable-libass 和 --enable-libfreetype,这两个是做字幕嵌入的命根子

小技巧:用 ffmpeg -encoders | grep subtitle 可以查看当前支持的字幕编码器。如果看到 subtitle 和 ass,说明字幕嵌入功能已经就绪。

1.4 基础命令测试

环境搭好了,咱们跑几个命令热热身。这些命令虽然简单,但能帮你确认 FFmpeg 是否正常工作。

测试 1:查看视频信息

ffprobe -v error -show_entries stream=index,codec_type,codec_name input.mp4

这个命令会列出视频文件里所有流的信息。我经常用它来检查字幕流是否存在。

测试 2:转码测试

ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 output.mp4

把视频转成 H.264 编码。如果这条命令跑通了,说明核心编码器没问题。

测试 3:字幕嵌入测试

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output.mp4

这是最简单的字幕嵌入命令。把 SRT 字幕"烧"进视频画面里。如果这条命令报错,多半是 libass 没装好。

注意:上面的命令是"硬编码"字幕——字幕会变成画面的一部分,无法关闭。后面我们会讲"软嵌入"(封装字幕流),那是另一种玩法。

1.5 本章知识体系

下面这张图,帮你把第一章的核心脉络理清楚:

FFmpeg 环境搭建知识体系 FFmpeg 环境搭建 FFmpeg(转码/滤镜) FFplay(预览) FFprobe(分析) Windows 安装 macOS 安装 Linux 安装 验证安装(ffmpeg -version) 基础命令测试 字幕嵌入测试(libass) 关键检查点 版本 ≥ 5.0 | 编译参数含 --enable-libass | 字幕编码器可用

1.6 常见问题与避坑

最后,我把这些年遇到的环境问题整理一下,你遇到了可以直接对照排查:

问题现象 可能原因 解决方案
ffmpeg: command not found 环境变量没配好 检查 Path 是否包含 FFmpeg 的 bin 目录
Unknown encoder 'libx264' 编译时没包含 x264 换用完整构建版,或自己编译
Subtitle encoding failed 缺少 libass 支持 重新安装带 libass 的版本
Fontconfig error 字体路径没配置 设置 FONTCONFIG_PATH 环境变量

我曾经在 macOS 上折腾了一下午,就因为 Homebrew 装的 FFmpeg 没带 libass。后来我改用 brew install ffmpeg --with-libass 重新装,问题才解决。所以,安装前一定确认编译参数里有没有 libass,这是做字幕嵌入的前提条件。