1. FFmpeg环境搭建:工欲善其事,必先利其器
说实话,我见过太多人一上来就急着敲命令,结果环境没配好,折腾半天连个视频都转不出来。做字幕嵌入更是如此——你想想看,字幕流、编码器、滤镜链,哪个环节出问题都白搭。所以第一章,咱们先把地基打牢。
1.1 FFmpeg是什么?
FFmpeg,说白了就是一个跨平台的音视频处理瑞士军刀。它能转格式、能裁剪、能加滤镜、能嵌字幕——几乎你能想到的音视频操作,它都能干。
我个人习惯把它拆成三部分理解:
- FFmpeg:命令行主程序,负责转码、滤镜、封装
- FFplay:一个轻量播放器,用来快速预览效果
- FFprobe:分析工具,查看媒体文件的详细信息
做字幕嵌入时,我们主要跟 FFmpeg 打交道。FFprobe 用来检查字幕流是否存在,FFplay 用来预览嵌入效果。这三个工具,咱们都得装上。
核心概念:FFmpeg 本身不生产音视频,它只是音视频的搬运工——但搬运过程中,它可以加字幕、改编码、调参数。字幕嵌入的本质,就是把字幕流"塞"进视频容器里,或者把字幕"烧"进画面像素里。
1.2 三平台安装指南
我在 Windows、macOS、Linux 上都部署过 FFmpeg,每个平台都有各自的坑。下面我把踩过的坑和最佳实践一并告诉你。
Windows 安装
Windows 用户最省心的方式,就是下载官方编译好的二进制包。
- 打开 ffmpeg.org/download.html,选择 Windows 版本
- 推荐下载 gyan.dev 或 BtbN 的完整构建版(full build)
- 解压到
C:\ffmpeg目录 - 把
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 本章知识体系
下面这张图,帮你把第一章的核心脉络理清楚:
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,这是做字幕嵌入的前提条件。