类似推荐
编辑推荐
FFmpeg详细介绍及API使用。
内容简介
本书详细介绍了开源音视频处理软件FFmpeg的使用,按照所讲述的内容及读者的不同层次,本书划分为上下两篇。
上篇为基础与参数详解,介绍了FFmpeg的基本组成部分、工具使用,以及封装、转码、流媒体、滤镜和设备操作。
下篇为API使用及开发,介绍了FFmpeg封装、编解码和滤镜部分的API使用操作,相关操作均以实例方式进行说明,包括新旧API的操作方法和异同,并给出了大量的API使用、自定义功能模块、基于FFmpeg的API开发自己的播放器的示例,以及其在实际开源软件中的应用等。
作者简介
作者刘歧,快手音视频首席架构师、FFmpeg官方源代码活跃维护者和推荐顾问、FFmpeg GSoC Mentor、腾讯云TVP,擅长音视频流媒体技术、分布式流媒体系统设计和流媒体CDN系统开发,个人技术兴趣领域广泛,包括音视频技术、操作系统、分布式系统、通信技术、嵌入式技术等,目前在快手负责音视频基础技术架构升级与优化。
章节目录
版权信息
内容提要
推荐语
序
前言
服务与支持
上篇 基础与参数详解
第1章 多媒体基础
1.1 从现实世界到数字世界
1.1.1 颜色和图像
1.1.2 电影、电视和视频
1.1.3 音频
1.1.4 音视频封装、传输和未来
1.2 视频图像像素点的数据格式
1.2.1 图像的位深
1.2.2 FourCC
1.2.3 灰度模式表示
1.2.4 YUV色彩表示
1.2.5 RGB色彩表示
1.2.6 HSL与HSV色彩表示
1.3 视频逐行和隔行扫描、NTSC与PAL制式
1.3.1 逐行与隔行扫描
1.3.2 NTSC制式
1.3.3 PAL制式
1.4 帧率、PTS和DTS
1.5 图像分辨率与宽高比
1.6 图像的色彩空间
1.7 音频采样数据格式
1.7.1 声道
1.7.2 采样率
1.7.3 采样位深
1.7.4 带宽计算
1.8 小结
第2章 FFmpeg简介
2.1 FFmpeg的发展历史
2.2 FFmpeg的基本组成
2.2.1 封装/解封装模块AVFormat
2.2.2 编/解码模块AVCodec
2.2.3 滤镜模块AVFilter
2.2.4 设备模块AVDevice
2.2.5 图像转换模块swscale
2.2.6 音频转换模块swresample
2.2.7 编解码工具ffmpeg
2.2.8 播放器ffplay
2.2.9 多媒体分析器ffprobe
2.3 不同平台下的编译
2.3.1 Windows平台编译FFmpeg
2.3.2 Linux平台编译FFmpeg
2.3.3 macOS平台编译FFmpeg
2.4 FFmpeg特性的选择与定制
2.4.1 编码器支持
2.4.2 解码器支持
2.4.3 封装支持
2.4.4 解封装支持
2.4.5 通信协议支持
2.5 小结
第3章 FFmpeg工具使用基础
3.1 ffmpeg常用命令
3.1.1 封装转换
3.1.2 解码和编码
3.1.3 转码流程
3.2 ffprobe常用命令
3.2.1 ffprobe常用参数
3.2.2 ffprobe使用示例
3.3 ffplay常用命令
3.3.1 ffplay常用参数
3.3.2 ffplay高级参数
3.3.3 ffplay的数据可视化分析应用
3.3.4 ffplay快捷键
3.4 小结
第4章 封装与解封装
4.1 视频文件转MP4
4.1.1 MP4格式标准介绍
4.1.2 Fragment MP4与CMAF
4.1.3 MP4分析工具
4.1.4 MP4在FFmpeg中的Demuxer
4.1.5 MP4在FFmpeg中的Muxer
4.2 视频文件转FLV
4.2.1 FLV文件标准介绍
4.2.2 FLV Muxer参数说明
4.2.3 文件转FLV举例
4.2.4 生成带关键索引的FLV
4.2.5 FLV文件格式分析工具
4.3 视频文件转MPEG-TS
4.3.1 MPEG-TS格式简介
4.3.2 MPEG-TS Muxer参数说明
4.3.3 MPEG-TS格式分析工具
4.4 视频文件转HLS
4.4.1 HLS标准的M3U8介绍
4.4.2 HLS Muxer参数
4.4.3 HLS Muxer举例说明
4.5 视频文件切片
4.5.1 segment切片参数
4.5.2 segment切片举例
4.5.3 使用ss与t参数切片
4.6 视频文件的音视频流抽取
4.6.1 提取AAC音频流
4.6.2 提取H.264视频流
4.6.3 提取H.265视频流
4.7 系统资源使用情况
4.8 小结
第5章 编码与转码
5.1 软编码H.264
5.1.1 x264编码参数简介
5.1.2 H.264编码举例
5.2 硬件加速
5.2.1 基于OS的硬件加速方案简介
5.2.2 NVIDIA GPU硬编解码
5.2.3 Intel QSV硬编解码
5.2.4 Raspberry Pi硬编解码
5.2.5 macOS系统硬编解码
5.2.6 其他加速方案简介
5.3 输出MP3
5.3.1 MP3编码参数介绍
5.3.2 MP3的编码质量设置
5.3.3 平均码率编码ABR参数
5.4 输出AAC
5.4.1 AAC编码器操作
5.4.2 FDK-AAC
5.4.3 高质量AAC设置
5.4.4 AAC音频质量对比
5.5 系统资源使用情况
5.6 小结
第6章 流媒体技术
6.1 录制与发布RTMP流
6.1.1 RTMP参数说明
6.1.2 RTMP参数举例
6.2 录制与发布RTSP流
6.2.1 RTSP demuxer参数介绍
6.2.2 RTSP demuxer参数使用举例
6.2.3 RTSP demuxer/muxer的一些小说明
6.3 录制HTTP流
6.3.1 HTTP参数说明
6.3.2 HTTP参数举例
6.4 录制与发布UDP/TCP流
6.4.1 TCP与UDP参数
6.4.2 TCP/UDP参数使用举例
6.4.3 TCP/UDP使用小结
6.5 多路流输出
6.5.1 管道方式输出多路流
6.5.2 tee封装格式输出
6.5.3 tee协议输出多路流
6.6 DASH流输出
6.6.1 参数介绍
6.6.2 参数举例
6.7 HDS流输出
6.7.1 参数说明
6.7.2 HDS使用举例
6.8 小结
第7章 bitstream过滤器
7.1 aac_adtstoasc过滤器
7.1.1 ADTS格式
7.1.2 ASC格式
7.2 mp4toannexb过滤器
7.2.1 Annex B格式
7.2.2 AVCC格式
7.2.3 hevc_mp4toannexb/h264_mp4toannexb的使用
7.3 h264_metadata过滤器
7.3.1 h264_metadata参数说明
7.3.2 h264_metadata参数举例
7.3.3 其他Codec的metadata过滤器
7.4 其他常用bitstream过滤器
7.4.1 dump_extra
7.4.2 trace_headers
7.4.3 filter_units
7.5 小结
第8章 滤镜使用
8.1 滤镜表达式使用
8.2 滤镜描述格式
8.2.1 滤镜基本排列方式
8.2.2 时间内置变量
8.3 视频水印操作
8.3.1 文字水印示例
8.3.2 图片水印示例
8.4 画中画操作
8.5 视频多宫格处理
8.6 视频字幕操作
8.6.1 ASS字幕流写入视频流
8.6.2 ASS字幕写入封装容器
8.7 视频3D化处理
8.7.1 stereo3d处理3D视频
8.7.2 3D图像转换示例
8.8 视频截图操作
8.8.1 vframes参数截取一张图片
8.8.2 fps滤镜定时获得图片
8.9 音频流滤镜操作
8.9.1 双声道合并单声道
8.9.2 双声道提取
8.9.3 双声道转双音频流
8.9.4 单声道转双声道
8.9.5 两个音频源合并双声道
8.9.6 多个音频合并为多声道
8.10 音频音量探测
8.10.1 音频音量获得
8.10.2 绘制音频波形
8.11 生成测试元数据
8.11.1 生成音频测试流
8.11.2 生成视频测试流
8.12 音视频倍速处理
8.12.1 atempo音频倍速处理
8.12.2 setpts视频倍速处理
8.13 云剪辑常用技术
8.13.1 定格帧
8.13.2 透明视频兼容处理
8.13.3 隔行交错视频兼容处理
8.13.4 HDR视频兼容处理
8.13.5 雪碧图和WebVTT
8.13.6 缩略图
8.13.7 复杂项目渲染
8.13.8 色度抠图
8.13.9 蒙版抠图
8.13.10 调色
8.13.11 透明度调整
8.13.12 动态缩放
8.13.13 画质检测
8.13.14 滤镜动态调整
8.13.15 深度学习
8.14 小结
第9章 采集设备操作
9.1 Linux设备操作
9.1.1 查看设备列表
9.1.2 采集设备fbdev参数说明和使用
9.1.3 采集设备v4l2参数说明和使用
9.1.4 采集设备x11grab参数说明和使用
9.2 macOS设备操作
9.2.1 查看设备列表
9.2.2 设备采集举例
9.3 Windows设备采集
9.3.1 使用dshow采集音视频设备
9.3.2 使用vfwcap采集视频设备
9.3.3 使用gdigrab采集窗口
9.4 小结
下篇 API使用及开发
第10章 libavformat接口的使用
10.1 媒体流封装
10.2 媒体流解封装
10.3 文件转封装
10.4 视频截取
10.5 AVIO以及示例
10.6 AVPacket常用操作
10.7 小结
第11章 libavcodec接口的使用
11.1 旧接口的使用
11.1.1 视频解码旧接口
11.1.2 视频编码旧接口
11.1.3 音频解码旧接口
11.1.4 音频编码旧接口
11.2 新接口的使用
11.2.1 视频解码新接口
11.2.2 视频编码新接口
11.2.3 音频解码新接口
11.2.4 音频编码新接口
11.3 硬件加速的编解码
11.3.1 硬件加速解码
11.3.2 硬件加速编码
11.4 AVFrame操作
11.5 内存操作
11.6 小结
第12章 libavfilter接口的使用
12.1 Filter和FilterGraph简述
12.2 FFmpeg中内置的滤镜
12.2.1 音频滤镜
12.2.2 视频滤镜
12.3 libavfilter的API使用
12.4 使用滤镜给视频加Logo
12.5 小结
第13章 FFmpeg辅助库的使用
13.1 libavutil的dict与opt操作
13.2 libswscale的sws_scale图像转换
13.2.1 图像转换流程
13.2.2 代码实例
13.3 libswresample执行声音转换
13.3.1 声音转换流程
13.3.2 代码实例
13.4 小结
第14章 音视频播放器开发实例
14.1 播放器开发概述
14.2 SDL核心功能API介绍
14.2.1 初始化SDL库
14.2.2 图像渲染
14.3 SDL音频播放
14.3.1 SDL事件循环
14.3.2 SDL定时器
14.4 播放器解码和展示
14.4.1 FFmpegPlayerCtx
14.4.2 播放器设计
14.4.3 事件循环线程
14.4.4 demux线程
14.4.5 视频解码线程
14.4.6 音视频同步
14.4.7 音视频扩展
14.5 小结
第15章 FFmpeg在RTC中的实例解析
15.1 RTC的特点
15.1.1 什么是RTC
15.1.2 RTC媒体传输
15.2 FFmpeg在Chromium中的应用
15.2.1 FFmpeg在Chromium WebRTC中的应用
15.2.2 FFmpeg在Chromium中的其他应用
15.3 FFmpeg在FreeSWITCH中的应用
15.3.1 FreeSWITCH简介
15.3.2 FreeSWITCH的FFmpeg模块开发环境准备
15.3.3 FFmpeg初始化和加载
15.3.4 avcodec实例
15.3.5 avformat实例
15.3.6 其他
15.4 FFmpeg在BareSIP中的应用
15.4.1 AVCodec
15.4.2 AVFormat
15.4.3 AVFilter
15.5 小结
第16章 定制FFmpeg模块
16.1 添加AVFormat模块
16.1.1 book文件格式
16.1.2 添加文件
16.1.3 添加文件封装格式
16.1.4 添加文件解封装格式
16.2 添加AVCodec模块
16.2.1 book编解码算法定义
16.2.2 实现book编码
16.2.3 实现book解码
16.2.4 将编解码器注册到FFmpeg并加入编译工程
16.2.5 运行测试
16.3 添加AVFilter模块
16.3.1 添加基础滤镜
16.3.2 支持多线程图像处理
16.3.3 支持图像动态化的表达式
16.3.4 支持process_command
16.4 添加Protocol模块
16.4.1 添加新协议的消息结构
16.4.2 回调函数
16.4.3 编译
16.4.4 测试
16.5 小结
第17章 FFmpeg调试与测试
17.1 自身的调试选项
17.1.1 debug选项
17.1.2 DTS/PTS问题的排查
17.2 loglevel与report
17.2.1 使用loglevel
17.2.2 使用report
17.3 在调用库时的调试
17.3.1 基于日志
17.3.2 基于带调试信息库
17.4 给社区汇报Bug及提交补丁
17.4.1 代码风格
17.4.2 给FFmpeg贡献代码
17.5 小结
深入理解FFmpeg是2023年由人民邮电出版社出版,作者刘歧。
得书感谢您对《深入理解FFmpeg》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。