第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,我个人建议用预编译包,别自己编译,太折腾了。
- 打开浏览器,访问
https://ffmpeg.org/download.html。 - 找到Windows图标,点击“Windows builds from gyan.dev”或“BtbN”。
- 下载release-full或release-essentials版本。我一般选full,省得缺东西。
- 解压到你喜欢的目录,比如
C:\ffmpeg。 - 把
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处理一个视频文件的完整流程。你给它一个 input.mp4,它先拆包(解封装),然后把压缩的视频数据还原成原始帧(解码),中间可以加滤镜,再重新压缩(编码),最后打包成新格式(封装)。
说白了,转码就是“拆了重装”,中间还能顺手改点东西。我在项目里经常用这个流程来批量处理素材,效率比手动操作高太多了。
1.5 本章小结
这一章我们聊了FFmpeg是什么、能干什么、怎么装。你只要记住三点:
- FFmpeg是命令行工具,没有图形界面,但功能极其强大。
- 安装方式因系统而异,Windows手动解压加环境变量,macOS用Homebrew,Linux用包管理器。
- 它的核心流程是:输入 → 解封装 → 解码 → 滤镜 → 编码 → 封装 → 输出。