简介
FFmpeg 是一套能够处理音频、视频和其它多媒体文件及流的完整解决方案。由于其无与伦比的通用性和强大的功能,它被誉为数字媒体领域的“瑞士军刀”。
核心组成
FFmpeg 项目不仅仅是一个单一的程序,它主要由以下几个部分构成:
-
ffmpeg
:这是最核心的命令行工具。用户通过它来进行音视频的转码(格式转换)、剪辑、缩放、添加滤镜、合并文件等几乎所有操作。绝大多数人说“使用 FFmpeg”时,指的就是使用这个工具。 -
ffplay
:一个基于 SDL 和 FFmpeg 库的简易媒体播放器。它功能简单,但非常适合用来快速预览和测试经过ffmpeg
处理后的文件,或者直接播放各种奇特的媒体格式。 -
ffprobe
:一个媒体信息分析工具。它可以从音视频文件中提取出详细的元数据(Metadata)和流信息,例如编码格式、分辨率、帧率、码率、时长、音轨、字幕等。这对于调试和自动化处理流程至关重要。 -
一系列核心库 (Libraries):这才是 FFmpeg 的真正动力源泉。许多著名的软件(如 VLC 播放器、Chrome 浏览器、YouTube、Blender 等)都在底层使用了 FFmpeg 的库来处理多媒体。主要包括:
libavcodec
:包含了几乎所有主流的音视频编码器和解码器。libavformat
:用于处理各种多媒体容器格式(如 MP4, MKV, AVI)的封装和解封装。libavfilter
:提供了丰富的音视频滤镜,如裁剪、缩放、水印、调速等。libavutil
:包含了一些核心的工具函数。libswscale
:用于图像的缩放和色彩空间转换。libswresample
:用于音频的重采样。
主要功能
FFmpeg 的功能几乎涵盖了音视频处理的方方面面,以下是一些最常见的应用场景:
- 格式转换 (Transcoding):将视频从一种格式转换到另一种,例如
MKV
转MP4
,MOV
转WebM
。 - 编解码转换:改变视频的编码方式,例如将
H.264
编码的视频转换为更高效的H.265 (HEVC)
。 - 剪辑与合并:从一个长视频中截取一小段,或者将多个视频片段无缝拼接成一个文件。
- 调整参数:改变视频的分辨率、帧率、码率,以适应不同设备或网络环境。
- 音视频分离/合并:从视频中提取出音频轨道(例如
MP4
->MP3
),或为视频添加新的音轨。 - 添加滤镜和效果:给视频添加水印、文字、模糊效果,调整亮度/对比度,旋转视频等。
- 屏幕录制:可以直接录制桌面操作。
- 制作 GIF:将视频片段转换为高质量的 GIF 动图。
- 直播推流:将本地视频文件或摄像头/桌面捕获的画面推送到流媒体服务器(RTMP/HLS 协议)。
安装
下载地址:https://ffmpeg.org/download.html
将解压后 bin
目录的路径添加到系统的 PATH
环境变量中。这样你就可以在任何路径下直接运行 ffmpeg
命令,而不需要每次都输入完整路径。
语法
FFmpeg 是通过命令行操作的,语法通常是:
|
|
[]
(方括号): 表示可选参数或选项。 这意味着这部分内容可以存在,也可以不存在,ffmpeg 仍然可以正常运行。{}
(花括号): 表示必须参数或选项。 这意味着这部分内容是必需的,ffmpeg 才能正常运行。
选项:
-vn
:忽略输入文件中的视频流-acodec
:指定音频编码器 (Audio Codec),可选的有:copy
: 直接复制音频流,不进行重新编码。 这通常是最快的,并且不会降低音频质量(如果输入音频已经是你想要的格式)。libmp3lame
: 使用 LAME MP3 编码器。 这是创建 MP3 文件的常用选择。需要安装 LAME 库才能使用。aac
: 使用 AAC (Advanced Audio Coding) 编码器。 AAC 通常比 MP3 提供更好的音质。libfdk_aac
: 使用 Fraunhofer FDK AAC 编码器。 比aac
性能更好,但可能需要单独编译支持。libopus
: 使用 Opus 编码器。 提供非常好的音质,尤其是在较低的比特率下。pcm_s16le
: 使用 PCM (Pulse Code Modulation) 编码器,将其保存为 16 位 Little Endian PCM,通常用于未经压缩的音频(例如 WAV 文件)。flac
: 使用 FLAC (Free Lossless Audio Codec) 编码器。 用于无损压缩音频。
使用
查看文件信息
这是处理任何文件的第一步。
|
|
或者
|
|
格式转换 (将 MP4 转换为 AVI)
|
|
FFmpeg 会自动根据输出文件的扩展名选择合适的编码器。
改变视频分辨率 (缩放到 1280x720)
|
|
-vf
代表 “video filter”(视频滤镜)。scale
是其中一个滤镜。
提取音频 (保存为 MP3)
|
|
- -vn: 表示 “no video”(不包含视频)。
- -acodec libmp3lame: 指定使用 LAME 库来编码 MP3。
提取音频(不转换)
|
|
剪切视频 (从第 10 秒开始,持续 15 秒)
|
|
-ss
: seek start (开始时间)。-t
: duration (持续时间)。-c copy
: 表示“直接复制流”,不对音视频进行重新编码。这样做速度极快,且无质量损失,是剪辑、合并时的首选。