这一篇只做三件事:确认工具存在、理解命令的基本形状、成功生成一个输出文件。先不用记住滤镜、时间戳或多轨映射。
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 只负责观察结果,不会替代结构检查。
检查安装和能力
ffmpeg -versionffprobe -versionffplay -version版本信息中的构建配置会影响可用的编码器、滤镜和协议。需要使用某个编码器前先查当前机器:
ffmpeg -hide_banner -encoders 2>&1 | Select-String "libx264|libx265|aac"需要某个滤镜时也同样检查:
ffmpeg -hide_banner -filters 2>&1 | Select-String "scale|fps|overlay"命令找不到时,问题是安装或 PATH,不是输入视频损坏。Unknown encoder 也优先表示当前构建没有该编码器或名称写错。
命令的基本形状
最小形式是:
ffmpeg [选项] -i 输入文件 [输出选项] 输出文件例如:
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 篇再展开。
第一次播放和查看
ffplay input.mp4如果只想读取信息,不要依赖 ffmpeg -i 的人类日志,使用:
ffprobe -hide_banner input.mp4输出中先找 Duration、Stream、视频分辨率和音频编码;字段含义见第 02 篇。
第一次转封装:不改变媒体内容
当目标只是换容器,并且目标容器支持输入流时:
ffmpeg -i input.mp4 -c copy output.mkv这里的 copy 表示复制压缩后的媒体数据,不是编码器名称。它通常快、不会增加一次有损编码,但不能解决目标容器不支持某条流的问题。
完成后检查:
ffprobe -v error -show_format -show_streams -of json output.mkv第一次转码:改变编码
例如把视频编码为 H.264、音频编码为 AAC:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4这会解码再编码,速度、体积和画质取决于编码器和参数。若本机构建没有 libx264,先从 -encoders 列表选择实际可用的编码器;不要只改扩展名来“转换格式”。
不覆盖已有文件
学习时让输出文件使用新名称最安全。脚本需要明确覆盖策略时,可以选择:
ffmpeg -n -i input.mp4 -c copy output.mkv-n 在输出已存在时失败;-y 则会直接覆盖。两者都不是媒体处理本身的必要参数。
这一篇的最小检查清单
ffmpeg -version能返回版本。ffprobe input.mp4能读到输入。- 至少成功执行一次
-c copy或转码命令。 - 用
ffprobe重新查看输出,并用ffplay试听/观看。
如果第 2 步失败,先处理路径、权限、文件完整性或输入协议;不要直接增加复杂参数。
评论