这一篇只做三件事:确认工具存在、理解命令的基本形状、成功生成一个输出文件。先不用记住滤镜、时间戳或多轨映射。

FFmpeg 工具家族

工具用途最常见的动作
ffmpeg读取、处理并输出媒体转封装、转码、剪切、推流
ffprobe查看媒体的结构和属性看有哪些流、编码、分辨率和时长
ffplay播放或预览媒体快速确认画面和声音

可以先记成:ffprobe 看,ffmpeg 做,ffplay 播。它们不是同一个命令的三个参数,而是三个可独立运行的程序。

flowchart LR
I[输入媒体] --> P[ffprobe<br/>读取结构]
I --> F[ffmpeg<br/>处理并输出]
F --> O[输出媒体]
O --> V[ffplay<br/>播放验证]
P -. 提供流与编码事实 .-> F

这不是强制的执行顺序,而是排错时最稳妥的协作关系:ffprobe 的结果帮助你写出正确的 -map 和编码参数,ffplay 只负责观察结果,不会替代结构检查。

检查安装和能力

Terminal window
ffmpeg -version
ffprobe -version
ffplay -version

版本信息中的构建配置会影响可用的编码器、滤镜和协议。需要使用某个编码器前先查当前机器:

Terminal window
ffmpeg -hide_banner -encoders 2>&1 | Select-String "libx264|libx265|aac"

需要某个滤镜时也同样检查:

Terminal window
ffmpeg -hide_banner -filters 2>&1 | Select-String "scale|fps|overlay"

命令找不到时,问题是安装或 PATH,不是输入视频损坏。Unknown encoder 也优先表示当前构建没有该编码器或名称写错。

命令的基本形状

最小形式是:

ffmpeg [选项] -i 输入文件 [输出选项] 输出文件

例如:

Terminal window
ffmpeg -i input.mp4 output.mkv

-i 声明输入,最后一个路径是输出。输出扩展名通常帮助 FFmpeg 选择容器(Muxer),但扩展名本身不会改变编码;是否复制或重新编码由 -c、滤镜和目标容器共同决定。

想把命令拆开看,可以使用:

ffmpeg 程序
-i input.mp4 输入
output.mkv 输出
flowchart LR
A[全局选项] --> B[输入选项]
B --> C[-i 输入 URL]
C --> D[输出选项]
D --> E[输出 URL]

多数选项应放在它要作用的输入或输出附近。多输入、多输出和选项作用域在第 04、05 篇再展开。

第一次播放和查看

Terminal window
ffplay input.mp4

如果只想读取信息,不要依赖 ffmpeg -i 的人类日志,使用:

Terminal window
ffprobe -hide_banner input.mp4

输出中先找 DurationStream、视频分辨率和音频编码;字段含义见第 02 篇。

第一次转封装:不改变媒体内容

当目标只是换容器,并且目标容器支持输入流时:

Terminal window
ffmpeg -i input.mp4 -c copy output.mkv

这里的 copy 表示复制压缩后的媒体数据,不是编码器名称。它通常快、不会增加一次有损编码,但不能解决目标容器不支持某条流的问题。

完成后检查:

Terminal window
ffprobe -v error -show_format -show_streams -of json output.mkv

第一次转码:改变编码

例如把视频编码为 H.264、音频编码为 AAC:

Terminal window
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4

这会解码再编码,速度、体积和画质取决于编码器和参数。若本机构建没有 libx264,先从 -encoders 列表选择实际可用的编码器;不要只改扩展名来“转换格式”。

不覆盖已有文件

学习时让输出文件使用新名称最安全。脚本需要明确覆盖策略时,可以选择:

Terminal window
ffmpeg -n -i input.mp4 -c copy output.mkv

-n 在输出已存在时失败;-y 则会直接覆盖。两者都不是媒体处理本身的必要参数。

这一篇的最小检查清单

  1. ffmpeg -version 能返回版本。
  2. ffprobe input.mp4 能读到输入。
  3. 至少成功执行一次 -c copy 或转码命令。
  4. ffprobe 重新查看输出,并用 ffplay 试听/观看。

如果第 2 步失败,先处理路径、权限、文件完整性或输入协议;不要直接增加复杂参数。

依据:FFmpeg 命令行官方文档FFmpeg 下载与构建说明