深入理解FFmpeg

深入理解FFmpeg

立即阅读
手机扫码
  • 微信扫一扫

    关注微信公众号

编辑推荐

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》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

你可能喜欢
Maya 2020 超级学习手册 电子书
本书基于中文版Maya2020编写,通过大量的操作实例系统地讲解了三维动画的制作技术,是一本面向零基础读者的专业教程。全书共12章,详细讲解了软件的操作界面、模型制作方法、灯光技术、摄影机技术、材质贴图、渲染技术、流体特效、粒子系统等内容。本书结构清晰、内容全面、通俗易懂,第3~12章还设计了相应的实例,并阐述了制作原理及操作步骤,以此提升读者的实际操作能力。本书的配套学习资源内容丰富,包括书中所
深入浅出Spring Boot 3.x 电子书
全方位讲解Spring Boot 3.x技术。
新印象OctaneforCinema4D渲染技术核心教程(修订版) 电子书
一本提高Cinema4D三维渲染技术的教程图书。
24小时全速学会Photoshop2021 电子书
本书由浅入深地讲解了Photoshop 2021的功能和应用。
Photoshop CC实战培训教程 电子书
本书根据Photoshop教学人员的授课经验及工作人员的实际操作经验编写而成。全书共有20章,首先详细介绍PhotoshopCC2017的基础知识,有利于读者打好基础,接着深入讲解PhotoshopCC2017的功能,使读者能够深入了解PhotoshopCC2017的精髓和使用方法;最后讲解综合实例,深入浅出地对PhotoshopCC2017在每个领域的应用进行讲解,读者既能巩固前面所学,又能提高