描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302651765
由从业十余年一线资深音视频开发专家、畅销书作者倾力编撰,通俗、易学、实用,贴近开发实践。
深入浅出地介绍FFmpeg的基本概念、基础知识和高级特性,从入门到精通,适合不同层次的读者学习。
案例丰富,基本上每章都提供项目案例,全书共9个项目案例,所有项目全流程完整呈现,并给出详尽的代码实现和注解说明,直接套用即可开发出自己的应用。
涵盖内容广泛,涉及从桌面开发到移动开发,如音视频查看、播放、转换、剪辑、推拉流等内容。
《FFmpeg开发实战:从零基础到短视频上线》是一本FFmpeg开发的实战教程,由浅入深,由基础到高级,带领读者一步一步走进音视频开发的神奇世界。全书共分为12章。其中,第1~5章是基础部分,主要讲解FFmpeg的环境搭建、FFmpeg的开发基础、FFmpeg的编解码、FFmpeg处理图像和FFmpeg处理音频;第6~10章是进阶部分,主要讲解FFmpeg加工视频、FFmpeg添加图文、FFmpeg自定义滤镜、FFmpeg混合音视频和FFmpeg播放音视频;第11和12章是平台应用部分,主要讲解FFmpeg的桌面开发和FFmpeg的移动开发。本书在讲解FFmpeg知识点的同时给出了大量实战范例,方便读者迅速将所学的知识运用到音视频开发中。通过本书的学习,读者能够掌握音视频开发的基本技术,包括音视频查看、音视频转换、音视频播放、音视频剪辑、视频推拉流等。
《FFmpeg开发实战:从零基础到短视频上线》适用于广大从事FFmpeg开发的专业人士、有志于转型FFmpeg开发的程序员以及对FFmpeg开发有兴趣的业余爱好者,也可作为大中专院校和培训机构音视频课程的教材。
第 1 章 FFmpeg环境搭建 1
1.1 FFmpeg简介 1
1.1.1 FFmpeg是什么 1
1.1.2 FFmpeg的用途 1
1.1.3 FFmpeg的发展历程 2
1.2 Linux系统安装FFmpeg 2
1.2.1 Linux开发机配置要求 2
1.2.2 安装已编译的FFmpeg及其SO库 3
1.2.3 自行编译与安装FFmpeg 5
1.3 在Windows系统下安装FFmpeg 10
1.3.1 Windows开发机配置要求 10
1.3.2 安装依赖的Windows软件 10
1.3.3 安装已编译的FFmpeg及其DLL库 15
1.4 FFmpeg的开发框架 17
1.4.1 可执行程序 18
1.4.2 动态链接库 21
1.4.3 第一个FFmpeg程序 23
1.5 小结 26
第 2 章 FFmpeg开发基础 27
2.1 音视频的编码标准 27
2.1.1 音视频编码的发展历程 27
2.1.2 音视频文件的封装格式 29
2.1.3 国家数字音视频标准AVS 31
2.2 FFmpeg的主要数据结构 34
2.2.1 FFmpeg的编码与封装 35
2.2.2 FFmpeg的数据包样式 37
2.2.3 FFmpeg的过滤器类型 39
2.3 FFmpeg查看音视频信息 41
2.3.1 打开与关闭音视频文件 41
2.3.2 查看音视频的信息 42
2.3.3 查看编解码器的参数 45
2.4 FFmpeg常见的处理流程 47
2.4.1 复制编解码器的参数 47
2.4.2 创建并写入音视频文件 51
2.4.3 使用滤镜加工音视频 54
2.5 小结 58
第 3 章 FFmpeg的编解码 59
3.1 音视频时间 59
3.1.1 帧率和采样率 59
3.1.2 时间基准的设定 62
3.1.3 时间戳的计算 64
3.2 分离音视频 67
3.2.1 原样复制视频文件 67
3.2.2 从视频文件剥离音频流 70
3.2.3 切割视频文件 72
3.3 合并音视频 74
3.3.1 合并视频流和音频流 74
3.3.2 对视频流重新编码 76
3.3.3 合并两个视频文件 82
3.4 视频浏览与格式分析 85
3.4.1 通用音视频播放器 86
3.4.2 视频格式分析工具 88
3.4.3 把原始的H264文件封装为MP4格式 90
3.5 小结 92
第 4 章 FFmpeg处理图像 93
4.1 YUV图像 93
4.1.1 为什么要用YUV格式 93
4.1.2 把视频帧保存为YUV文件 98
4.1.3 YUV图像浏览工具 100
4.2 JPEG图像 106
4.2.1 为什么要用JPEG格式 106
4.2.2 把视频帧保存为JPEG图片 107
4.2.3 图像转换器 110
4.3 其他图像格式 112
4.3.1 把视频帧保存为PNG图片 113
4.3.2 把视频帧保存为BMP图片 116
4.3.3 把视频保存为GIF动画 119
4.4 实战项目:图片转视频 124
4.5 小结 131
第 5 章 FFmpeg处理音频 132
5.1 PCM音频 132
5.1.1 为什么要用PCM格式 132
5.1.2 把音频流保存为PCM文件 135
5.1.3 PCM波形查看工具 139
5.2 MP3音频 142
5.2.1 为什么要用MP3格式 142
5.2.2 Linux环境集成mp3lame 144
5.2.3 把音频流保存为MP3文件 145
5.3 其他音频格式 148
5.3.1 把音频流保存为WAV文件 148
5.3.2 把音频流保存为AAC文件 152
5.3.3 音频重采样 158
5.4 实战项目:拼接两段音频 163
5.5 小结 168
第 6 章 FFmpeg加工视频 169
6.1 滤波加工 169
6.1.1 简单的视频滤镜 169
6.1.2 简单的音频滤镜 176
6.1.3 利用滤镜切割视频 182
6.1.4 给视频添加方格 185
6.2 添加特效 188
6.2.1 转换图像色度坐标 188
6.2.2 添加色彩转换特效 192
6.2.3 调整明暗对比效果 195
6.2.4 添加淡入淡出特效 197
6.3 变换方位 199
6.3.1 翻转视频的方向 199
6.3.2 缩放和旋转视频 200
6.3.3 裁剪和填充视频 202
6.4 实战项目:老电影怀旧风 204
6.5 小结 206
第 7 章 FFmpeg添加图文 207
7.1 添加图标 207
7.1.1 添加图片标志 207
7.1.2 清除图标区域 209
7.1.3 利用调色板生成GIF动画 211
7.2 添加文本 214
7.2.1 Linux环境安装FreeType 214
7.2.2 添加英文文本 216
7.2.3 添加中文文本 218
7.3 添加字幕 221
7.3.1 Linux环境安装libass 221
7.3.2 Linux安装中文字体 225
7.3.3 添加中文字幕 226
7.4 实战项目:卡拉OK音乐短片 229
7.4.1 视频字幕制作工具 229
7.4.2 制作卡拉OK字幕 233
7.5 小结 237
第 8 章 FFmpeg自定义滤镜 238
8.1 Windows环境编译FFmpeg 238
8.1.1 给FFmpeg集成x264 238
8.1.2 给FFmpeg集成avs2 241
8.1.3 给FFmpeg集成mp3lame 243
8.1.4 给FFmpeg集成FreeType 245
8.1.5 给FFmpeg集成x265 248
8.2 优化FFmpeg源码 255
8.2.1 读写音视频文件的元数据 255
8.2.2 元数据的中文乱码问题处理 258
8.2.3 修改FFmpeg源码解决乱码 262
8.3 自定义视频滤镜 265
8.3.1 添加模糊和锐化特效 265
8.3.2 视频滤镜的代码分析 267
8.3.3 自定义视频翻转滤镜 269
8.4 实战项目:侧边模糊滤镜 271
8.4.1 实现两侧模糊逻辑 271
8.4.2 集成侧边模糊滤镜 275
8.5 小结 277
第 9 章 FFmpeg混合音视频 278
9.1 多路音频 278
9.1.1 同时过滤视频和音频 278
9.1.2 利用多通道实现混音 281
9.1.3 给视频添加背景音乐 289
9.2 多路视频 293
9.2.1 通过叠加视频实现画中画 293
9.2.2 多路视频实现四宫格效果 302
9.2.3 透视两路视频的混合画面 307
9.3 转场动画 311
9.3.1 给视频添加转场动画 311
9.3.2 转场动画的代码分析 314
9.3.3 自定义斜边转场动画 317
9.4 实战项目:翻书转场动画 322
9.4.1 贝塞尔曲线实现翻页特效 322
9.4.2 集成翻书转场动画效果 326
9.5 小结 329
第 10 章 FFmpeg播放音视频 330
10.1 通过SDL播放音视频 330
10.1.1 FFmpeg集成SDL 330
10.1.2 利用SDL播放视频 335
10.1.3 利用SDL播放音频 342
10.2 FFmpeg推流和拉流 346
10.2.1 什么是推拉流 346
10.2.2 FFmpeg向网络推流 350
10.2.3 FFmpeg从网络拉流 353
10.3 SDL处理线程间同步 355
10.3.1 SDL的线程 355
10.3.2 SDL的互斥锁 357
10.3.3 SDL的信号量 360
10.4 实战项目:同步播放音视频 367
10.4.1 同步音视频的播放时钟 367
10.4.2 优化音视频的同步播放 371
10.5 小结 376
第 11 章 FFmpeg的桌面开发 377
11.1 搭建Qt开发环境 377
11.1.1 安装桌面开发工具Qt 377
11.1.2 创建一个基于C 的Qt项目 381
11.1.3 把Qt项目打包成可执行文件 383
11.2 桌面程序播放音频 385
11.2.1 给Qt工程集成FFmpeg 385
11.2.2 Qt工程使用SDL播放音频 387
11.2.3 通过QAudioSink播放音频 392
11.3 桌面程序播放视频 396
11.3.1 通过QImage播放视频 396
11.3.2 OpenGL的着色器小程序 404
11.3.3 使用OpenGL播放视频 407
11.4 实战项目:桌面影音播放器 411
11.5 小结 415
第 12 章 FFmpeg的移动开发 416
12.1 搭建Android开发环境 416
12.1.1 搭建Android的NDK开发环境 416
12.1.2 交叉编译Android需要的SO库 420
12.1.3 App工程调用FFmpeg的SO库 421
12.2 App通过FFmpeg播放音频 427
12.2.1 交叉编译时集成mp3lame 427
12.2.2 通过AudioTrack播放音频 429
12.2.3 使用OpenSL ES播放音频 432
12.3 App通过FFmpeg播放视频 439
12.3.1 交叉编译时集成x264和FreeType 439
12.3.2 通过ANativeWindow播放视频 443
12.3.3 使用OpenGL ES播放视频 449
12.4 实战项目:仿剪映的视频剪辑 455
12.5 小结 461
附录A 音视频专业术语索引 462
音视频开发是近年来的新兴软件开发行业,广泛运用于在线视频、网络直播、安防监控、远程办公、线上课堂等业务场景。特别是随着5G技术的深入应用和短视频自媒体的广泛传播,音视频领域的技术支持显得愈发重要。
在众多音视频开发技术框架中,FFmpeg是最基础的音视频处理平台。不论是音视频的编码、加工,还是传输,都离不开FFmpeg的支撑。可以说,入门音视频开发的第一个门槛就是FFmpeg,掌握FFmpeg是进军音视频开发的必经之路。
尽管FFmpeg在音视频领域拥有举足轻重的地位,但长期以来入门FFmpeg开发并非易事。一方面,音视频涉及的专业概念种类繁多,初学者容易困惑;另一方面,FFmpeg基于Linux环境的C语言开发,个人开发由于环境限制,难以深入FFmpeg编程。此外,FFmpeg作为底层框架本身并不提供可视化交互界面。例如,桌面程序需要Qt环境,而手机App需要Android环境,因此,在真正运用FFmpeg时,需要结合FFmpeg Qt,或者FFmpeg Android,这无疑增加了学习FFmpeg编程的难度。
基于以上考虑,本书按照下列章节结构来介绍FFmpeg开发实战。
第一,在解释音视频概念时,首先阐述相关术语的来龙去脉,然后描述这些概念的原理和分类,并最后提供对应的FFmpeg范例代码,使读者能够逐步理解音视频的基础知识,从理论到实践。
第二,详细说明在Linux环境编译FFmpeg及其相关库的步骤,同时也详述在Windows环境编译FFmpeg及其相关库的步骤,以便读者能够在个人计算机上搭建FFmpeg的开发学习环境。
第三,对于通过FFmpeg实现的每项功能,不仅提供基于函数调用的示例代码,还提供具体的FFmpeg操作命令,是本书兼具FFmpeg的代码开发教程与FFmpeg的命令使用手册两种用途。
第四,最后两章介绍了在Qt环境中集成FFmpeg并在计算机上运行播放影音的桌面程序,以及在Android Studio环境中集成FFmpeg并在手机上运行剪辑视频的手机App。这方便读者学以致用,能够迅速将FFmpeg编程应用到桌面开发与移动开发中。
第五,在介绍FFmpeg开发的过程中,引入了一些辅助工具用于编译、浏览、分析、加工等操作,包括Visual Studio、MSYS、CMake、VLC、YUView、Audacity、Subtitle Edit、MediaMTX等。本书对这些工具都进行详细介绍,以帮助读者熟练掌握FFmpeg开发技能。
全书共分为12章。其中,第1~5章是基础部分,主要讲解FFmpeg环境搭建、FFmpeg开发基础、FFmpeg的编解码、FFmpeg处理图像、FFmpeg处理音频;第6~10章是进阶部分,主要讲解FFmpeg加工视频、FFmpeg添加图文、FFmpeg自定义滤镜、FFmpeg混合音视频、FFmpeg播放音视频; 第11和12章是平台应用部分,主要讲解FFmpeg的桌面开发和FFmpeg的移动开发。
本书在讲解FFmpeg知识点的同时给出了大量实战范例,方便读者迅速将所学的知识运用到音视频开发中。这些实战范例包括:图片转视频、拼接两段音频、老电影怀旧风、卡拉OK音乐短片、侧边模糊滤镜、翻书转场动画、同步播放音视频、桌面影音播放器、仿剪映的视频剪辑等。通过实战项目的练习,读者能够掌握音视频的基本开发技术,包括音视频查看、音视频转换、音视频播放、音视频剪辑、视频推拉流等。
所谓零基础,指的是FFmpeg零基础,而非C语言零基础,在读者开始学习本书之前,建议先学完谭浩强的《C程序设计》,且需要掌握基本的Linux操作命令。在学习第11章之前,建议先入门Qt平台的C 桌面编程。在学习第12章之前,建议先掌握Android平台的Java移动编程,可参考笔者的App开发专著《Android Studio开发实战:从零基础到App上线(第3版)》。
本书中与FFmpeg相关的C代码都是基于FFmpeg 5.1.2编写的。前10章的C/C 代码在Linux(包括EulerOS和CentOS)和Windows(包括Windows 10和Windows 11)上编译和调试通过;第11章的程序代码采用C 编写,并在Qt 6.5.2上编译和调试通过;第12章的App代码采用Java与C 编写,并在Android Studio Dolphin(小海豚版本)上编译和调试通过。
在学习音视频开发过程中,需要用到一些开源软件,逐个下载它们颇费功夫,而且部分软件还要搭配对应的FFmpeg版本。为了方便读者使用这些软件,笔者把本书用到的软件源码和安装文件统一打包,并与随书配套的例程源码和演示课件放在一起,读者可扫描下方的二维码一起下载。
如果你在下载过程中遇到问题,请发邮件至[email protected],邮件标题为“FFmpeg开发实战:从零基础到短视频上线”获得帮助。
最后,感谢王金柱编辑的热情指导,感谢出版社其他人员的辛勤工作,感谢我的家人一直以来的支持,感谢各位师长的谆谆教导。没有他们的鼎力相助,本书就无法顺利完成。
欧阳燊
2024年1月
评论
还没有评论。