写作不是思考的记录,写作就是思考本身。—理查德·费曼

本文开头借用了 理查德 的名言来表达 写作的重要性。写作不仅仅是 记录你的学习过程,更是一种总结,扩展思维的方法。有很多东西,会在你写作的过程中不断被深入。甚至有些知识点你自己没意识到的,直到写出来了才明白。

《FFmpeg原理》的创作之路其实就是 我自己学习音视频技术的过程,我在2年前不是做音视频开发的。之前更多的是做PHP后端开发。所以对 C/C++ 并不是特别熟悉。

当我决定学习音视频的时候,我立即买了好几本高大上的书来看,例如《信息论》《数字视频编码技术原理》等等。这些书其实我在2年前是看不懂的,我硬着头皮去看了一个月,也看不懂。

后来发现,是我的学习路线错了。音视频开发,基本上使用的都是 C/C++,所以首先需要学习的是 编译 链接,调试的基础知识,做到大多数 C/C++ 项目都能顺利 build 起来,然后单步调试。

你得先是一位 C/C++ 工程师,然后才能成为一位 音视频 工程师。

所以在阅读了 俞甲子的《程序员的自我修养》跟 张银奎老师的《软件调试》之后,我精炼出了一章《编译链接基础知识》的内容,如下:


在掌握了 C/C++ 基本的 编译链接,调试的知识之后,我们就可以去学习 FFmpeg 的 API 函数的用法了。有可能会有同学问,那 C/C++ 的语法用不用学,这个我觉得学个 50% 就行了,剩下的语法知识,你直接在实战中,在调试别人的代码中学习会更加快。

如果你一直不去实战,不去调试,不去看别人成熟的代码设计。会很容易陷入 C/C++ 的语法迷宫。


音视频开发,我个人觉得起步还是需要踏实一点,一开始你不用去看那些 编解码算法,只需要知道 编码系统 可以压缩数据就行了。

刚开始,你只需要去学习怎么调库就完事了,音视频领域有很多库,有非常多的框架,如下:

  1. Android 多媒体框架,包括 MediaPlayer,MediaCodec 等等。还有 OpenMax

  2. IOS,macOS 的多媒体框架 AVFoundation

  3. Windows 的多媒体框架,Media Foundation,DXVA

  4. FFmpeg,GStreamer,webrtc

在《FFmpeg原理》里面,主要就介绍 FFmpeg 这个库的基本使用,如下:


但其实,掌握了 FFmpeg 库的基本使用之后,还是不够,因为对于 FFmpeg 这个开源项目来说,除了 libavformat.solibavcodec.so 等等 8 个动态库之外,还有一个 ffmpeg.cffmpeg.c 是什么?

ffmpeg.cffmpeg.exe 命令行的核心代码,ffmpeg.c 也是调了 8 个动态库的 API 函数来实现自身功能的。但是 ffmpeg.c 本身有 5千多行代码,这 5000 多行代码是处理各种场景的鲁棒性,pts 时间戳,各种参数设置的。

ffmpeg 开发最难搞的就是各种参数的设置,如果你自己调 API 实现功能,肯定会遇到某些参数设置错了,某些参数漏了没设置等等,问题。

ffmpeg.c 把这些细节问题通通帮你解决了。

所以在学习了 FFmpeg API 函数的基本使用,了解了基本的 解复用解码编码Muxer 的过程之后。就需要去学习 ffmpeg.c 的代码,不用了解 ffmpeg.c 里面所有的细节,做到 能根据需求 二次开发 ffmpeg.c 即可,这也就是《FFmpeg原理》一书的内容,如下:


当你掌握了 FFmpeg API 的基本用法,也可以二次开发 ffmpeg.c 之后,大部分的需求你基本都能解决了。但是还有一部分需求需要更深入知识。

例如自定义一个 Demuxer/Muxer 来实现加密播放器的功能。自定义一个 AVFilter 来实现特定的视频效果。等等,这个就是《FFmpeg原理》下册的内容,如下:


最后再分享一下我创作这本书的一些经验。

1,不要设置 Deadline

因为写作是需要灵感,灵感不会因为你设置了 Deadline 就会蹦出来。相反 Deadline 会阻碍灵感的产生。

当 Deadline 到期的时候,匆匆忙忙把一些章节内容完成,很容易避重就轻。

我觉得一部好的作品,它是没有完成的那一天的,因为我平时就是有灵感,想到了更好的表达这个算法的描述,我就去修改文章,或者增添内容,等等。


同时,写作可以不断训练你的文字表达能力,当你写得越多的时候,很多复杂的东西,你都能用简单的语言来讲述给别人听。

而且写作通常是需要大量阅读参考书籍的,这也会使你的阅读速度大幅度提高。


最后,推荐一下我的《FFmpeg原理》VIP版,售价 79.9 元,VIP版 一共提供 以下 4 种服务。

  1. VIP专属章节

  2. 作者一对一答疑,答疑范围仅限于本书内容

  3. 音视频俱乐部 社群

  4. PDF,EPUB 离线电子书(1700页)

详情请点击 FFmpeg原理VIP版购买 查看

《FFmpeg原理》的创作之路相关推荐

  1. 《ClickHouse入门、实战与进阶》的创作之路

    写作不是思考的记录,写作就是思考本身. --理查德·费曼 目录 写作的重要性 写作之路 OLAP技术对于企业决策者.数据分析师等至关重要 分享一些经验 最后 写作的重要性 本文开头借用了费曼的名言来表 ...

  2. 【微信小程序创作之路】-入门

    [微信小程序创作之路]-入门 第一章 微信小程序历史.简介.开启创作之路 文章目录 [微信小程序创作之路]-入门 前言 一.小程序的简介 二.小程序的历史 三.小程序优势 1.使用门槛低 2.快速开发 ...

  3. 【微信小程序创作之路】- 小程序窗口整体配置(导航栏、标题)

    [微信小程序创作之路]- 小程序窗口导航栏配置 第五章 微信小程序窗口导航栏配置 文章目录 [微信小程序创作之路]- 小程序窗口导航栏配置 前言 一.入口文件的配置 二.页面配置 三.全局默认窗口配置 ...

  4. 【微信小程序创作之路】- 小程序常用页面样式

    [微信小程序创作之路]- 小程序常用页面样式 第四章 微信小程序用页面样式 文章目录 [微信小程序创作之路]- 小程序常用页面样式 前言 一.总体样式--全局样式and局部样式 1.全局样式 2.局部 ...

  5. Oracle 18c体系架构图创作之路 - 设计者说(精品海报大放送)

    编辑说明:在刚刚落幕的第八届数据技术嘉年华大会现场,我们正式发布了『Oracle 18c体系架构图』,应广大网友的呼吁,特别向不能到场的朋友放送. (回顾嘉年华:云数据库时代:企业数据架构的云化智能重 ...

  6. 利用ffmpeg与PotPlayer将双路图片转换为红蓝视频

    #合成左右路视频并设置帧率,每秒播放一帧 ffmpeg -r 1-i left%d.png left.mp4 ffmpeg -r 1 -i right%d.png right.mp4 #将两路视频并排 ...

  7. 【通信原理 入坑之路】—— 信号的包络分析2 包络分析的意义以及OQPSK调制的引入

    本篇 B l o g Blog Blog 是接上一篇未完的分析而作的,主要是继续深入理解信号包络以及包络的意义.同时,本篇 B l o g Blog Blog 是<深入浅出通信原理>的学习 ...

  8. FFmpeg命令行实现两路/多路视频拼接 合并 合成 同时播放

    首先放一个两路视频合并的例子 ffmpeg -pix_fmt rgb24 -s 960x960 -i bag_level_7_renderSize_1_960x960_8bits_rgb24i.rgb ...

  9. 【通信原理 入坑之路】—— 详解IQ调制以及星座图原理

    写在前面:本博客是<深入浅出通信原理>的学习笔记,仅供个人学习参考使用 文章目录 一. IQ调制与解调的原理与过程 1.1 利用旋转向量理解IQ调制(正交调制) 1.2 利用旋转向量理解I ...

最新文章

  1. 自动机器学习:团队如何在自动学习项目中一起工作?
  2. GitHub 轻松提速教程
  3. HihoCoder 1513 : 小Hi的烦恼
  4. 四、物理数据模型PDM(Physical Data Model )
  5. AspectJ学习笔记
  6. 某大型银行深化系统之十八:性能设计之三
  7. access vba代码大全_VBA编程在翻译中的应用
  8. 聊天室 java代码_java聊天室的实现代码
  9. 合抱之木,生于毫末; 九层之台,起于垒土。
  10. uniapp editor富文本编辑器,h5富文本编辑器封装成插件
  11. 两个子组件之间的传值
  12. Untiy添加水印并保存(包含文字转图片并打水印)
  13. 3.罗马数字转整数(JS)
  14. 行列式的计算方法(含四种,看完就会!)
  15. 投研报告 - Ariva(ARV)
  16. Mac 下面安装 Git 步骤
  17. 四只鸭子在一个水池中,分别随机出现在圆圈中任意一点,四只鸭子出现在同一个半圆的概率是多少?
  18. ASP.NET Identity 三(转载)
  19. Asp,PHP,JSP,.Net几种网站开发语言比较
  20. linux无线网卡monitor模式,ubuntu下开启无线网卡的monitor mode

热门文章

  1. “粪便银行”:救人拿钱两不误 A Poop Bank in Massachusetts Will Pay You $40 Every Day
  2. 数据库事务、分布式一致性和分布式事务
  3. 怎样建立立体化实战化的安全防御体系
  4. 运维人员的军刀——ROS
  5. 程序员军刀之 ffmpeg -- TBD
  6. python输入姓名输出欢迎_python试卷
  7. cartographer_learn_5
  8. Android应用上架前如何知道应用下载地址
  9. C语言中的函数返回值、return用法、return 0详解
  10. ppt转换器官方下载及操作方法