三条命令覆盖日常:先 ffprobe 看清它是什么 → 再决定转容器还是重编码 → 对照结果再调参数。
3.5.1 讲了 FFmpeg 是什么,这一节讲平时真正用到的那一层:命令行。
一、命令行工具三兄弟
ffmpeg:处理音视频——转码、转容器、切片段、加滤镜。 ffprobe:读文件信息——相当于命令行的 MediaInfo。 ffplay:快速播放——用来验证结果,不做生产用途。 三个各有分工,但 ffmpeg 一个人能干的活最多。
二、三条最常用的命令
转容器(不重编码):ffmpeg -i in.flv -c copy out.mp4——最快,几乎无损。
重编码降码率:ffmpeg -i in.mp4 -b:v 2M out.mp4——慢,会损画质。
看文件规格:ffprobe -show_streams in.mp4——相当于命令行版 MediaInfo。
三、参数怎么记
不要背参数,要记住它的结构:ffmpeg -i 输入 [处理参数] 输出。
输入输出之间那一堆参数,无非是三类:转什么、怎么转、转成什么样。
转什么:-c:v(视频编码)、-c:a(音频编码)——copy 表示不重编。
怎么转:-b:v(码率)、-s(分辨率)、-r(帧率)。
转成什么样:-f(格式)、-preset(速度与压缩的取舍)。
四、最重要的一个参数
-c copy 值得单独记——它表示【不重新编码,只搬运】。
转容器时用它,速度是重编码的几十倍,而且完全无损。
很多人一上手就用重编码转格式,白白花了几十倍时间还掉了画质。
所以第一条判断永远是:这次要换的是【盒子】还是【内容】?
五、动手 Demo:三条最常用的命令行
三条命令的顺序其实就是日常工作的顺序。
cmds = [
("ffmpeg -i in.mp4 out.avi", "转容器(不重编码)", "-c copy"),
("ffmpeg -i in.mp4 -b:v 2M out.mp4", "重编码降码率", "-b:v"),
("ffprobe in.mp4", "看文件规格", "-show_streams"),
]
for c, what, key in cmds:
print("%-32s %-16s %s" % (c, what, key))
实跑输出:
--------------------------------------------------------------------
三条最常用的命令行
--------------------------------------------------------------------
命令 作用 关键参数
--------------------------------------------------------------------------
ffmpeg -i in.mp4 out.avi 转容器(不重编码) -c copy
ffmpeg -i in.mp4 -b:v 2M out.mp4 重编码降码率 -b:v
ffprobe in.mp4 看文件规格 -show_streams
三条命令的顺序其实就是日常工作的顺序:
**先 ffprobe 看清它是什么 → 再决定是转容器还是重编码 → 对照结果再调参数。**
顺序就是日常工作的顺序:先看清它是什么,再决定是转容器还是重编码。
-c copy 是最省时间的一个参数——不重编码,只搬运,又快又无损。
30 秒实验
- 在命令行敲
ffprobe -show_streams加一个你的视频文件,看它输出什么。 - 找出视频流和音频流各自的编码名。
常见误区
- 转容器也重编码。能用
-c copy就别重编。 - 死记参数。记住结构【输入 参数 输出】,参数按用途分三类。
自测三问(点开对答案)
1. FFmpeg 的命令行三兄弟分别是什么? —— ffmpeg 处理、ffprobe 读信息、ffplay 快速播放。 2. `-c copy` 是什么意思? —— 不重新编码,只搬运流——转容器时用,又快又无损。 3. 命令行参数可以分成哪三类? —— 转什么(编码)、怎么转(码率/分辨率/帧率)、转成什么样(格式/预设)。- ☐ 下一节(3.5.3 FFmpeg开发包)
相关笔记
- FFmpeg — 命令行之下的那些库
- FFmpeg开发包 — 把命令行换成代码
- MediaInfo参数说明 — 读结果时的对照
- 🎬 FFmpeg入门详解 · 索引