FFmpeg 是一套开源音视频工具链,可以通过命令行转换文件、选择音视频流、应用滤镜,并接入脚本或其他程序。它适合需要明确控制输入、处理方式和输出的任务。开始写命令前,最有用的判断是:只需要换容器或选轨道,还是必须改变编码与画面、声音内容?

截至 2026 年 10 月 6 日,官方 9.0 分支最新稳定源码版为 9.0.2,发布日期为 9 月 18 日。官方发布源码,可执行文件则通过下载页列出的构建项目或系统软件包获取。后文保留的 9.0.1 获取说明及 8.1.2 测试记录属于此前版本背景,不是当前版本号。
先用 ffprobe 看清输入
一个 MKV 或 MP4 文件可能同时包含视频、多条音轨、字幕和附件。文件扩展名只告诉你容器,不能说明里面所有流的编码。ffprobe 用于查看这些信息,ffmpeg 负责处理和输出;ffplay 则是基于 FFmpeg 与 SDL 的轻量播放工具。
ffprobe -v error -show_format -show_streams -of json "input.mkv"
这是按官方选项组合的探测示例:-show_format 查看容器,-show_streams 查看各条流,-of json 把信息按 JSON 输出。实际文件名需要替换。先看流的索引、类型、编码、分辨率及语言标记,再决定保留什么;本文命令用于说明,没有把它们写成对你的文件执行后的结果。
只换封装或保留一条流,研究 stream copy
ffmpeg -n -i "INPUT.mkv" -map 0:1 -c copy "OUTPUT.mp4"
此例沿用官方文档的单流选择方式,并加上不覆盖已有输出的 -n。0:1 指第一个输入中的索引为 1 的流,也就是第二条流;它不自动代表“视频”或“中文音轨”。必须先通过探测确认这条流是什么,否则可能得到一个只有音频或并非预期轨道的文件。
-c copy 复制压缩数据包,不经过解码、滤镜和重新编码,因而不会引入再次编码损失。但目标容器仍要接受该流及其相关信息。如果复制到 MP4 失败,应先判断编码与容器的兼容性,不要把改后缀当成通用解决办法。
多音轨文件尤其需要明确 -map。默认自动选择不等于保留所有音轨、字幕和附件;手动选择一条也不等于完整搬走文件内容。转出之前先列出需要留下的轨道,比输出后才发现字幕或原声缺失更容易处理。
需要改分辨率、叠图或混音,就进入转码流程
滤镜处理解码后的帧,随后需要重新编码被处理的流。因此在同一条视频流上既要缩放又要求直接 copy,处理路径互相矛盾。视频与音频可以分别配置:视频需要滤镜时,符合输出条件的音频仍可以单独研究流复制。
ffmpeg -n -i "video.mkv" -i "image.png" -filter_complex "overlay" "out.mkv"
这个示例把图片叠到视频上,重点展示多个输入和 -filter_complex 的关系。它没有固定编码器、位置或尺寸策略,真正处理素材时仍要按需求补充,不能当作所有图片和视频都适用的成品命令。单流的常规视频、音频滤镜常用 -vf、-af;多输入合成等复杂关系再用复杂滤镜图。
选项顺序同样需要看:多数非全局选项作用于它后面的那个输入或输出,多个输出也需要分别设置。若一条长命令失败,先拆开输入、选流、滤镜、编码和封装几步,确认是哪一环报错;逐步缩小命令范围,更容易定位报错。
下图是原文制作时使用 Gyan.dev 8.1.2 full build 生成的测试帧,保留的是此前的实际输出记录。它没有验证本文的文件转换示例,也不代表 9.0.2 构建的测试结果。

写批处理前,先定义输出合格的条件
- 确定接收方:本地播放器、手机或网站对容器和编码的要求可能不同,先知道文件要去哪里。
- 列出必须保留的信息:视频、目标语言音轨、字幕、章节或元数据,分别决定取舍。
- 输出到新名称或独立目录,示例中的 -n 会在同名输出已存在时退出,避免静默覆盖。
- 用探测结果核对输出结构,再在目标设备上比较画面、声音、时长和同步。确认一个代表性文件后,再扩大批量范围。
“命令结束且没有报错”只能说明流程完成,不代表选对音轨、音画同步或目标平台一定接受。批量任务最好保存使用的命令与构建版本,之后遇到一个特殊文件,才方便区分素材差异与环境变化。
获取 9.0.1:源码与第三方构建要分开看
FFmpeg 官方下载页明确说明,项目本身提供源码,已编译的可执行文件由外部项目维护。源码下载区域提供 9.0.1 的压缩包和 PGP 签名,适合需要自行编译、审查配置或把 FFmpeg 集成到开发流程中的用户;同一页面还分别列出 Linux 软件包、Windows 构建和 macOS 静态构建入口。
Windows 用户常见的 Gyan.dev 和 BtbN 构建不是 FFmpeg 官方直接打包的安装程序,而是官方页面列出的第三方分发渠道。构建项目可能提供 essentials、full、shared、静态包或包管理器入口,内置库、架构、压缩格式和更新节奏可能不同。下载前应先确认构建者、版本、校验值、包含的编码器和系统要求,不要把第三方构建页写成 FFmpeg 官方二进制仓库。
本次本机操作使用的是 Gyan.dev 的 8.1.2 full build,仅用于验证命令格式和滤镜输出;文章记录的 9.0.1 是官方页面截至 2026 年 8 月 25 日列出的稳定源码版本,两者不能混写成同一个构建。
源码、构建配置与许可说明
同样叫 FFmpeg,不同构建可能包含不同编码器和可选库。集成或再分发时,应查看实际构建配置及随包许可,不能只读上游版本号。官方说明以 LGPL 为基础,启用部分 GPL 组件会改变相应许可安排;具体产品的分发应依据所用组件和配置核对,本文不把某个构建笼统写成“无条件商用”。
需要批量处理、可重复命令或程序调用时,FFmpeg 的参数控制很有用;如果任务主要是拖动时间线、调整剪辑节奏,则图形化剪辑器更便于直接操作。了解输入和流的关系后,再借助图形工具,也更容易理解它最终输出了什么。
- 源码版本与构建入口:
https://ffmpeg.org/download.html - 输入、选流、复制与转码文档:
https://ffmpeg.org/ffmpeg.html - ffprobe 探测选项:
https://ffmpeg.org/ffprobe.html - 滤镜文档:
https://ffmpeg.org/ffmpeg-filters.html - 项目许可与配置边界:
https://ffmpeg.org/legal.html














暂无评论内容