ffmpeg 简介
FFmpeg 是一款免费的、开源的跨平台音视频处理工具,旨在提供高质量、高速度的多媒体处理功能,FFmpeg 设计以流式处理音视频。
FFmpeg 目前已成为业界公认的最强大、最全面的音视频处理工具之一,得到了广泛的应用。绝大多数的音视频相关应用和工具库,都直接或间接地引用了 FFmpeg。
FFmpeg 的开发始于2000年,最初由法国程序员 Fabrice Bellard 发起,后来有越来越多的开源贡献者参与。目前 FFmpeg 由一支由多名开发者组成的团队维护和开发。
音视频开发要掌握图像,视频,音频的基础知识,并学会如何对他们进行采集,渲染,处理,传输等一系列开发和应用。
采集解决了数据从哪里来的问题,渲染解决的是数据怎么崭新的问题,处理解决的是数据怎么加工的问题,传输解决的是数据怎么共享的问题。这里的每一个门类都可以深挖,衍生出一 个个充满技术挑战的话题。
C++音视频学习资料免费获取方法:关注音视频开发T哥,点击「链接」即可免费获取2023年最新C++音视频开发进阶独家免费学习大礼包!
1、音视频基础
1.1 音频基础知识
- 如何采集声音-模数转换原理
- 为什么高品质音频采样率>=44.1Khz
- 什么是PCM
- 一个采样点用多少位表示
- 采样值用整数还是浮点数表示
- 音量大小和采样值大关系
- 多少个采样点作为一帧数据
- 左右通道的采样数据如何排列
- 什么是PCM(脉冲编码调制)
- 音频编码原理
1.2 视频基础知识
- RGB彩色原理
- 为什么需要YUV格式
- 什么是像素
- 分辨率、帧率、码率
- YUV数据存储格式区别
- YUV内存对齐问题
- 为什么画面显示绿屏
- H264编码原理
- H264 I P B帧的关系
1.3 解复用基础知识
- 什么是解复用,比如MP4格式
- 为什么需要不同的复用格式MP4/FLV/TS
- 常见的复用格式MP4/FLV/TS
1.4 FFmpeg6.0开发环境搭建
- Windows、Ubuntu、MAC三大平台
- QT安装
- FFmpeg命令行环境
- FFmpeg API环境
- FFmpeg编译
- vs2019安装(win平台)
1.5 音视频开发常用工具
- MediaInfo,分析视频文件
- VLC播放器,播放测试
- EasyICE,分析TS流
- flvAnalyser,分析FLV
- mp4box,分析mp4
- audacity,分析音频PCM
- Elecard_streamEye,分析H264
- 海康YUVPlayer,分析YUV
2、FFmpeg6.0基石
2.1 FFmpeg命令
- 音频PCM/AAC文件提取
- 视频YUV/H264文件提取
- 解复用、复用
- 音视频录制
- 视频裁剪和合并
- 图片/视频转换
- 直播推流和拉流
- 水印/画中画/九宫格滤镜
注:掌握FFmpeg的目的: 1.快速掌握FFmpeg能做什么; 2.加深对音视频的理解。
2.2 SDL跨平台多媒体开发库实战
- SDL环境搭建
- SDL事件处理
- SDL线程处理
- 视频YUV画面渲染
- 音频PCM声音输出
注:SDL兼容Win、Ubuntu、Mac三大平台, 主要用于后续项目的画面显示和声音输出
2.3 FFmpeg基石精讲
- FFmpeg框架
- FFmpeg内存引用计数模型
- 解复用相关AVFormat XXX等
- 编解码相关AVCodec XXX等
- 压缩数据AVPacket
- 未压缩数据AVFrame
- FFmpeg面向对象思想
- Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
2.4 FFmpeg音视频解复用+解码
- 解复用流程
- 音频解码流程
- 视频解码流程
- FLV封装格式分析
- MP4封装格式分析
- FLV和MP4 seek有什么区别
- 为什么FLV格式能用于直播
- 为什么MP4不能用于直播
- MP4能否用来做点播
- AAC ADTS分析
- H264 NALU分析
- AVIO内存输入模式
- 音频重采样实战
- 重采样后的数据播放时长是否一致
- 重采样后PTS如何表示
- 视频解码后YUV内存对齐问题
- 音频解码后PCM排列格式问题
- 硬件解码dxva2/nvdec/cuvid/qsv
- 硬件gpu数据转移到cpu
- H265解码
注:FFmpeg API学习:视频解复用 -> 解码 -> 编码 -> 复用合成视频
2.5 FFmpeg音视频编码+复用合成视频
- AAC音频编码
- H264视频编码
- PCM+YUV复用合成MP4/FLV
- H264编码原理
- IDR帧和I帧区别
- 动态修改编码码率
- GOP间隔参考值
- 复用合成MP4音视频不同步问题
- 编码、复用timebase问题
- MP4合成IOS不能播放问题
- 重采样后PTS如何表示
- 视频编码YUV内存对齐问题
- 硬件编码dxva2/nvenc/cuvid/qsv
- H265编码原理
- H264、H265编码互转
3、FFmpeg6.0进阶
3.1 FFmpeg过滤器
- FFmpeg过滤chain框架
- 音频过滤器框架
- 视频过滤器框架
- 多路音频混音amix
- 视频水印watermark
- 视频区域裁剪和翻转
- 视频添加logo
注: filter在视频剪辑领域应用广泛。
3.2 ffplay播放器
- 掌握ffplay.c的意义
- ffplay框架分析
- 解复用线程
- 音频解码线程
- 视频解码线程
- 声音输出回调
- 画面渲染时间间隔
- 音频重采样
- 画面尺寸格式变换
- 音频、视频、外部时钟同步区别
- 以视频为基准时音频重采样补偿
- 音量静音、调节大小的本质
- 音视频packet队列大小限制
- 音视频packet队列线程安全
- 音视频frame队列大小限制
- 音视频frame队列线程安全
- 暂停、播放实现机制
- seek播放导致的画面卡住问题
- seek播放数据队列、同步时钟处理
- 如何做到逐帧播放
- 播放器退出的流程要点
注: ffplay.c是ffplay命令的源码,掌握ffplay 对于我们自己开发播放器有事半功倍的效果。
4、FFmpeg6.0流媒体项目实战
4.1 FFmpeg+QT播放器
1.开源播放器分析
- 自研框架分析
- 播放器模块划分
- 解复用模块
- 音视频解码
- 播放器控制
- 音视频同步
- 软件解码+硬件解码
- 音量控制
- 变速播放
- 拖动跳转播放
- 画面亮度、饱和度调节
- 画面4:3 16:9切换
- 码流信息分析
- 画面旋转、翻转
- 支持截屏
项目意义:掌握播放器的开发,包括播放器框架分析、 模块设计、队列设计、音视频同步、变速、拖动播放 等核心机制。
4.2 FFmpeg RTMP录制+推流项目
- RTMP协议简介
- 录制+推流框架分析
- 麦克风、系统声音捕获
- 声音捕获延迟分析和解决
- 摄像头、屏幕画面捕获
- 画面捕获延迟分析和解决
- 音频重采样
- 视频scale
- AAC编码器封装
- H264编码器封装
- 音频编码参数优化
- 视频编码画质/CPU/码率/延迟优化
- 音频、视频采集时如何设置时间戳
- 采集-编码-推流时间戳转换
- 将音频、视频保存为MP4文件
- 采集-编码-保存mp4时间戳转换
- 支持推流画面预览
- 如何支持H265推流
- 如何支持麦克风和系统声音混音
- 实现音频采集降噪
- RTMP推流是否会导致延迟
- RTMP推流如何动态调整码率
- RTMP推流如何动态调整帧率
- Web端能否拉取RTMP推流
项目意义: 本项目推流模块采用FFmpeg API,不需要深入理解 RTMP协议仍然能实现推流直播。 掌握推流框架和视频录制框架,包括音视频采集、模块划分、 音视频同步、编码优化、推流延迟等核心技术。
4.3 FFmpeg RTMP拉流+录像项目
- RTMP协议简介
- 拉流+录像框架分析
- 拉流模块封装
- AAC解码模块封装
- H264解码模块封装
- 包队列设计
- 帧队列设计
- 实现音视频同步
- 能否不做音视频同步分析
- 没有MetaData能否播放
- RTMP拉流是否会导致延迟
- 如何检测RTMP拉流延迟
- 如何解决RTMP播放延迟
- 添加支持变速播放
- 变速播放策略分析和设置
- 秒开功能原理分析与实现
- ffplay、vlc能否用来测试播放延迟
- 实现拉流、保存视频为MP4
- 拉流、保存MP4时间戳转换
注: 掌握RTMP直播拉流+录像框架,包括拉流、队列设计、音视频同步、低延迟、保存为MP4文件等核心技术。
4.4 RTSP推流+录制项目
- RTSP协议简介
- 基于RTMP推流项目实现RTSP推流+录制
项目意义: 本项目推流模块采用FFmpeg API,不需要深入理解 RTSP协议仍然能实现推流直播。 掌握推流框架和视频录制框架,包括音视频采集、模块划分、 音视频同步、编码优化、推流延迟等核心技术。
4.5 RTSP拉流+录像项目
- RTSP协议简介
- 基于RTMP拉流项目实现RTSP拉流+录像
注: 掌握RTSP拉流+录像框架,包括拉流、队列设计、音视频同步、低延迟、保存为MP4文件等核心技术。
5、项目实践
5.1自研项目和源码分析
- SDL音频播放
- SDL视频播放
- FFmpeg内存引用计数
- MP4/FLV/TS解复用
- 提取H264
- 提取AAC
- H264/H265解码
- AAC/MP3解码
- AVIO内存输入模式
- 音频重采样
- 视频尺寸格式变换
- DXVA2解码
- NVDEC解码
- CUVID解码
- QSV解码
- AAC编码优化
- H264编码优化
- H265编码优化
- AAC转MP3
- H264转H265
- DXVA2编码
- NVENC编码
- CUVID编码
- QSV编码
- MP4合成
- FLV合成
- 多路音频混音
- 视频添加水印
- 视频区域裁剪
- 视频翻转
- 视频添加logo
- ffplay播放器
- 自研 QT播放器
- RTMP推流
- RTMP拉流
- RTSP推流
- RTSP推流
- HLS拉流
6、学习方法
- 先看文档再看视频
- 先把课程代码运行调试,然后修改调试,最后自己尝试重写
- 每节课的知识点总结成技术博客(每月有博客大赛,有奖金支持)
- 课程与工作相结合,重新思考需求功能
- 不理解的技术点 跟老师沟通
- 偏音视频客户端方向:服务器相关的内容以了解为主,比如SRS流媒体服务器,主要是理解推拉流框架、协议转换逻辑,不需要投入太多的时间阅读源码。
- 偏流媒体服务器方向:涉及到UI界面的设计以了解为主,比如播放器项目只需要专注于音视频相关的内容。
FFmpeg 学习书籍
《FFmpeg从入门到精通》是一本介绍FFmpeg的实战技术指南,全书共10章,分为两个部分。部分(第1~7章)为FFmpeg的命令行使用篇,介绍了FFmpeg的基础组成部分、FFmpeg工具使用、FFmpeg的封装操作、FFmpeg的转码操作、FFmpeg的流媒体操作、FFmpeg的滤镜操作、FFmpeg的设备操作。
第二部分(第8~10章)为FFmpeg的API使用篇,介绍了FFmpeg封装部分的API使用操作、FFmpeg编解码部分的API使用操作,FFmpeg滤镜部分的API使用操作,相关操作均以实例方式进行说明,包括新API及旧API的操作。
本书适合从事多媒体服务器端开发的工程师,嵌入式视频处理工程师。本书也适合作为计算机专业本科生和研究生,尤其是多媒体研究方向作为参考用书。
还有一本网上流传的 <<ffmpeg源码解析>>pdf版本,然后目前我就没看到其他关于ffmpeg的书籍了;这里多说一句,不同版本的ffmpeg,api可能不太一样,具体细节,各位可以去ffmpeg官网查看手册说明即可!
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/15459.html