第1章 FFmpeg初识:它到底是什么?

说实话,我第一次接触FFmpeg的时候,也觉得这玩意儿有点神秘。一个命令行工具,没有漂亮的图形界面,却能搞定几乎所有音视频处理的事。干我们这行的,早晚得跟它打交道。

FFmpeg的全称是Fast Forward Moving Picture Experts Group,名字挺长,但核心就一句话:一个开源的、跨平台的音视频处理瑞士军刀。我入行那会儿,前辈跟我说:“你只要学会FFmpeg,转码、剪辑、录屏、推流,基本就不用求人了。”后来我发现,这话一点不夸张。

一句话总结:FFmpeg 能读、能写、能转、能录、能推流,几乎所有你能想到的音视频格式,它都认识。

1.1 FFmpeg能做什么?

我习惯把FFmpeg的能力分成几个大块,这样比较好记。你想想看,日常工作中遇到的那些音视频需求,它基本都能搞定:

  • 格式转换:把MP4转成AVI,把MOV转成GIF,把WAV转成MP3。说白了,就是换个“包装”。
  • 视频压缩:调整分辨率、码率、帧率,把大文件变小。我在项目里经常用这个给客户传样片。
  • 音视频剪辑:截取片段、拼接多个文件、调整播放速度。
  • 提取与合成:从视频里抽音频,或者给视频换背景音乐。
  • 屏幕录制与推流:录屏、直播推流,FFmpeg都能干。
  • 滤镜处理:加字幕、加水印、调色、加特效。

嗯,这里要注意一点:FFmpeg不是万能的。它不擅长做复杂的非线性编辑(那是Premiere的活),也不擅长做精细的音频混音(那是Audition的活)。但如果你只是想批量转个码、压个视频,它比任何图形界面软件都快、都稳。

1.2 FFmpeg的下载与安装

安装这事,不同系统差别挺大。我分别说说,你按自己的系统来就行。

Windows 安装

Windows下安装FFmpeg,我个人建议用预编译包,别自己编译,太折腾了。

  1. 打开浏览器,访问 https://ffmpeg.org/download.html。
  2. 找到Windows图标,点击“Windows builds from gyan.dev”或“BtbN”。
  3. 下载release-full或release-essentials版本。我一般选full,省得缺东西。
  4. 解压到你喜欢的目录,比如 C:\ffmpeg。
  5. 把 C:\ffmpeg\bin 添加到系统环境变量 Path 里。

小技巧:添加环境变量后,打开cmd输入 ffmpeg -version,如果看到版本号,就说明装好了。我曾经见过有人解压完就直接用,结果cmd报“不是内部命令”,其实就是没加环境变量。

macOS 安装

macOS上我推荐用Homebrew,一行命令搞定,省心。

brew install ffmpeg

如果你没装Homebrew,也可以去官网下载macOS的静态编译包,解压后把 ffmpeg 可执行文件放到 /usr/local/bin 里。

注意:macOS从Catalina开始,系统会对未签名的可执行文件弹窗警告。我第一次装的时候就被拦住了,后来去“系统偏好设置 - 安全性与隐私”里手动允许才搞定。

Linux 安装

Linux最简单,直接用包管理器。不同的发行版命令略有不同:

发行版 安装命令
Ubuntu / Debian sudo apt install ffmpeg
CentOS / RHEL sudo yum install ffmpeg(需先启用EPEL)
Fedora sudo dnf install ffmpeg
Arch Linux sudo pacman -S ffmpeg

装完之后,同样用 ffmpeg -version 验证。如果提示找不到包,可能是你的源里没有,换个源或者加一下 ppa:jonathonf/ffmpeg4(Ubuntu用户)。

1.3 验证安装与第一个命令

不管哪个系统,装完之后都跑一下这个命令:

ffmpeg -version

你会看到类似这样的输出:

ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-nonfree
libavutil      58.  2.100 / 58.  2.100
libavcodec     60.  3.100 / 60.  3.100
libavformat    60.  3.100 / 60.  3.100
libavdevice    60.  1.100 / 60.  1.100
libavfilter     9.  3.100 / 9.  3.100
libswscale      7.  1.100 / 7.  1.100
libswresample   4. 10.100 / 4. 10.100
libpostproc    57.  1.100 / 57.  1.100

看到这些库了吗?libavformat负责封装格式,libavcodec负责编解码,libavfilter负责滤镜。FFmpeg就是靠这些库协同工作的。我刚开始学的时候,光看这些库名就晕了,后来慢慢就熟了。

1.4 FFmpeg的核心架构

为了让你更直观地理解FFmpeg是怎么工作的,我画了一张图。你看完就明白它内部是怎么流转的了。

FFmpeg核心架构与数据流转图 FFmpeg 核心架构与数据流转 输入文件 input.mp4 解封装 libavformat 解码 libavcodec 滤镜处理 libavfilter 编码 libavcodec 封装 libavformat 输出文件 output.avi 数据从输入文件开始,经过解封装、解码、滤镜、编码、封装,最终输出新文件

这张图展示的就是FFmpeg处理一个视频文件的完整流程。你给它一个 input.mp4,它先拆包(解封装),然后把压缩的视频数据还原成原始帧(解码),中间可以加滤镜,再重新压缩(编码),最后打包成新格式(封装)。

说白了,转码就是“拆了重装”,中间还能顺手改点东西。我在项目里经常用这个流程来批量处理素材,效率比手动操作高太多了。

1.5 本章小结

这一章我们聊了FFmpeg是什么、能干什么、怎么装。你只要记住三点:

  • FFmpeg是命令行工具,没有图形界面,但功能极其强大。
  • 安装方式因系统而异,Windows手动解压加环境变量,macOS用Homebrew,Linux用包管理器。
  • 它的核心流程是:输入 → 解封装 → 解码 → 滤镜 → 编码 → 封装 → 输出。