🎬 第三章 音视频开发常用工具
📄 一句话概括

三条命令覆盖日常:先 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 秒实验

  1. 在命令行敲 ffprobe -show_streams 加一个你的视频文件,看它输出什么。
  2. 找出视频流和音频流各自的编码名。

常见误区

  1. 转容器也重编码。能用 -c copy 就别重编。
  2. 死记参数。记住结构【输入 参数 输出】,参数按用途分三类。
自测三问(点开对答案) 1. FFmpeg 的命令行三兄弟分别是什么? —— ffmpeg 处理、ffprobe 读信息、ffplay 快速播放。 2. `-c copy` 是什么意思? —— 不重新编码,只搬运流——转容器时用,又快又无损。 3. 命令行参数可以分成哪三类? —— 转什么(编码)、怎么转(码率/分辨率/帧率)、转成什么样(格式/预设)。

相关笔记