以下是 FFmpeg 的基本概念和知识点的详细整理,从基础到深入,帮助你快速了解和掌握 FFmpeg。
1. 什么是 FFmpeg
定义:
- FFmpeg 是一个开源的多媒体框架,可以用来录制、转换和流式传输音视频。
- 支持各种音视频格式、编解码器和协议,是开发多媒体应用的核心工具。
特点:
- 跨平台:支持 Windows、Linux、macOS 等。
- 高性能:通过硬件加速优化(如 GPU 编解码)。
- 功能丰富:包括格式转换、视频编辑、流媒体传输等。
- 开源:代码开放,基于 LGPL/GPL 许可协议。
2. FFmpeg 的基本组成
FFmpeg 包括以下几个主要工具和库:
2.1 核心工具
ffmpeg:
- 命令行工具,用于音视频转换、处理和录制。
- 常见命令:
- 转码:
ffmpeg -i input.mp4 output.avi
- 提取音频:
ffmpeg -i input.mp4 -vn output.mp3
- 视频裁剪:
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 output.mp4
- 转码:
ffplay:
- 简单的多媒体播放器,用于播放和测试音视频。
- 示例:
ffplay input.mp4
ffprobe:
- 提供音视频文件的详细信息(如分辨率、时长、编解码器等)。
- 示例:
ffprobe -i input.mp4
2.2 核心库
libavcodec:
- 实现多种音视频编解码器(如 H.264、AAC)。
- 提供编码和解码功能。
libavformat:
- 处理多媒体容器格式(如 MP4、MKV、AVI)。
- 负责文件读取、写入和流式传输。
libavutil:
- 提供多媒体处理的工具函数(如日志、数学操作、时间戳处理)。
libswscale:
- 处理图像缩放和格式转换。
libswresample:
- 提供音频采样率转换和格式转换功能。
libavfilter:
- 实现音视频过滤器(如添加水印、裁剪、旋转)。
3. FFmpeg 的基本概念
3.1 编解码器
- 定义:编码器将原始音视频数据压缩为指定格式,解码器将压缩数据解压为原始数据。
- 常见编解码器:
- 视频:H.264、H.265(HEVC)、VP9、AV1。
- 音频:AAC、MP3、Opus、FLAC。
3.2 容器格式
- 定义:容器用于封装音视频数据,支持多种流。
- 常见格式:
- MP4、MKV、AVI(多媒体容器)。
- TS、FLV(流媒体容器)。
3.3 像素格式(Pixel Format)
- 定义:表示视频帧中像素的存储格式。
- 常见格式:
yuv420p
:每个像素 8 位,YUV420 采样。rgb24
:每个像素 8 位,RGB 颜色空间。
3.4 时间戳(PTS/DTS)
- PTS(Presentation Time Stamp):
- 表示帧在播放时的显示时间。
- DTS(Decoding Time Stamp):
- 表示帧在解码时的时间顺序。
4. FFmpeg 的常见操作
4.1 格式转换
- 转换容器格式:
1
ffmpeg -i input.mkv output.mp4
- 转换视频编码器:
1
ffmpeg -i input.mp4 -c:v libx264 output.mp4
- 转换音频编码器:
1
ffmpeg -i input.mp4 -c:a aac output.m4a
4.2 视频处理
- 裁剪视频:
1
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 output.mp4
- 调整分辨率:
1
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
- 旋转视频:
1
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
4.3 音频处理
- 提取音频:
1
ffmpeg -i input.mp4 -vn output.mp3
- 调整音量:
1
ffmpeg -i input.mp3 -filter:a "volume=2.0" output.mp3
4.4 添加滤镜
- 添加水印:
1
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
- 视频模糊:
1
ffmpeg -i input.mp4 -vf "boxblur=5:5" output.mp4
5. FFmpeg 编程基础
FFmpeg 提供丰富的 API,可通过代码实现多媒体处理功能。以下是常见操作的步骤:
5.1 解码视频
1 |
|
5.2 编解码核心步骤
- 打开输入文件,初始化
AVFormatContext
。 - 查找流并找到编解码器。
- 使用
AVCodecContext
初始化编解码器。 - 循环读取帧并解码。
- 清理资源。
6. 高级主题
6.1 硬件加速
- 使用 GPU 编解码(如 NVENC、VAAPI):
1
ffmpeg -i input.mp4 -c:v h264_nvenc output.mp4
6.2 流媒体传输
- 推流到 RTMP 服务器:
1
ffmpeg -re -i input.mp4 -f flv rtmp://server/live/stream
- 接收并播放流媒体:
1
ffplay rtmp://server/live/stream
6.3 视频拼接与分割
- 拼接视频:
1
ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4
- 分割视频:
1
ffmpeg -i input.mp4 -ss 00:00:00 -t 00:01:00 part1.mp4
7. 学习资源
7.1 官方文档
- FFmpeg 官方文档:https://ffmpeg.org/documentation.html
7.2 在线教程
- FFmpeg Wiki:https://trac.ffmpeg.org/
7.3 推荐书籍
- 《FFmpeg 从入门到精通》
- 《Multimedia Programming with FFmpeg》
7.4 社区与工具
- FFmpeg GitHub:https://github.com/FFmpeg/FFmpeg
- FFmpeg GUI 工具:HandBrake、OBS Studio
通过以上整理,你可以从 FFmpeg 的基础概念入手,逐步掌握其命令行用法和编程接口,最终实现高效的音视频处理和流媒体传输功能。