第一个转码命令:从 MP4 到 AVI

好,我们直接动手。打开你的终端,找一个 MP4 文件,输入下面这行命令:

ffmpeg -i input.mp4 output.avi

按下回车。几秒钟后,你手里就多了一个 AVI 文件。这就是 FFmpeg 最基础的转码操作。

我第一次用 FFmpeg 时,看到这么短的命令就能完成转码,说实话有点不敢相信。后来在项目中用它批量处理素材,才发现这行命令背后藏着不少门道。

拆解命令:-i 参数到底在干什么?

-i 是 FFmpeg 里最常用的参数,全称是 input。它的作用就一个:告诉 FFmpeg「我要处理哪个文件」。

你想想看,FFmpeg 本身是个命令行工具,它不知道你要操作什么。没有 -i,它就像一台没有原料的机器,空转而已。

核心规则:所有输入文件都必须用 -i 指定。一个命令里可以有多个 -i,但至少得有一个。

我习惯把 -i 理解为「喂料口」。你把原料(input.mp4)塞进去,FFmpeg 就开始干活了。

输出文件:FFmpeg 的「自动判断」机制

命令末尾的 output.avi 是输出文件名。这里有个关键点:FFmpeg 会根据文件扩展名自动选择编码器。

你写 .avi,它就自动用 AVI 容器 + 对应的视频/音频编码器。你写 .mp4,它就换一套。这就是为什么你不需要手动指定编码器——FFmpeg 帮你猜了。

输出扩展名 FFmpeg 自动选择的容器 常见默认编码器
.avi AVI mpeg4 (视频) / mp3 (音频)
.mp4 MP4 h264 (视频) / aac (音频)
.mkv Matroska h264 (视频) / aac (音频)
.mov QuickTime mpeg4 (视频) / aac (音频)

小技巧:如果你不确定 FFmpeg 会用什么编码器,可以加 -c copy 只复制流不重新编码。但那是后面章节的内容,现在先记住这个自动机制就好。

转码时到底发生了什么?

表面上看,你只是改了个文件名。实际上 FFmpeg 做了三件事:

  1. 解封装:读取 input.mp4 的容器格式,分离出视频流和音频流
  2. 解码 → 编码:把原始视频数据解码成未压缩的帧,再用新编码器重新压缩
  3. 封装:把重新编码后的数据写入 output.avi 容器

说白了,就是「拆开 → 重做 → 装回去」。这个过程会损失画质,因为重新编码是有损的。

我曾经在项目里用这个命令批量转码几百个文件,结果发现画质下降明显。后来才意识到,默认参数并不适合所有场景。嗯,这里要注意:简单的命令意味着简单的控制。

避坑指南:你可能遇到的问题

  • 文件找不到:路径写错了。建议把文件拖到终端里自动生成路径。
  • 编码器不支持:有些 AVI 播放器打不开 FFmpeg 默认生成的 AVI。可以试试加 -c:v libxvid 指定编码器。
  • 转码太慢:默认用的是软件编码,CPU 跑满。想快可以加 -preset ultrafast,但文件会变大。

警告:不要用这个命令处理重要素材的原始文件。先复制一份再转码。我曾经手滑覆盖了原始素材,后悔莫及。

本章核心流程图

下面这张图展示了从输入到输出的完整流程:

FFmpeg 基础转码流程 input.mp4 -i 参数 指定输入 FFmpeg 引擎 解封装 解码 → 编码 封装 output.avi 💡 核心逻辑:FFmpeg 根据输出文件扩展名自动选择容器和编码器,无需手动指定。 -i 参数是唯一必须的输入标记,所有待处理文件都要用它声明。

总结一下

这行命令虽然简单,但它是你掌握 FFmpeg 的起点。记住三点:

  • -i 是输入文件的「身份证」,必须带
  • 输出文件扩展名决定了 FFmpeg 的「自动选择」
  • 转码 = 解封装 + 重编码 + 重新封装,有画质损失