FFmpeg二次开发
  1bTlX33AWdQ4 2023年11月13日 14 0

本文主要讲解 FFmpeg 的二次开发,​​ffmpeg.exe​​ 的命令行功能特别强大,很多需求都能直接用命令行实现,但是总有一些需求用 命令行实现不太好做。

而你实现那些特殊需求,通常需要把 ​​ffmpeg.exe​​ 里面的某部分代码抄过来,本文讲的主要就是如何抄代码

我们需要新加一个程序 ​​loken.exe​​​,由于 FFmpeg 项目的惯例是编译生成 ​​xxx_g.exe​​​ ,然后 ​​strip​​​ 之后再生成没有 ​​_g​​ 的程序。

本文也使用这种惯例来编译。在 FFmpeg 的 ​​fftools​​​ 目录下新建一个 ​​loken.c​​​ 文件,内容直接把 ​​ffmpeg.c​​​ 的抄过来,然后在 ​​main​​​ 函数那里加一句 ​​printf​​ ,如下:

FFmpeg二次开发_命令行

再修改 ​​configure​​​ 脚本文件,把 ​​loken​​​ 加进去 ​​PROGRAM_LIST​​ 变量,如下:

FFmpeg二次开发_编解码器_02

然后修改一个 ​​fftools​​​ 目录里的 ​​makefile​​ 文件,把我们自己的程序加进去。如下:

FFmpeg二次开发_命令行_03

再需要修改一下 ​​configure​​ 里面的配置,这些是依赖,如下:

FFmpeg二次开发_滤镜_04

最后还要在 doc 目录下创建一个文件 ​​loken.texi​​​ 内容直接复制 ​​ffmpeg.texi​​​ 的即可,make 的时候需要这些 ​​texi​​ 文件生成文档。

现在可以执行 make 了,可以看到,会正常生成 loken 可执行文件,我们之前加的 ​​printf​​ 也打印出来了,如下:

FFmpeg二次开发_命令行_05

现在,你可以随意修改 ​​loken.c​​ 里面的代码来满足你的项目需求。

我为什么不新建一个 clion 项目来调 FFmpeg 编译出来的动态库或者静态库呢?是因为,通常你抄代码,或者删掉一些不需要的代码的时候,你需要对照 ​​ffmpeg.c​​​ ,有时候需要运行一个好的程序调试看看变量,才能知道自己写的程序有什么问题。原来 的 ​​ffmpeg.c​​ 就是好的,没有被改坏的程序

clion 调试方法请看​​《用Ubuntu18与clion调试FFmpeg》​

​loken.c​​​ 跟 ​​ffmpeg.c​​ 在同一个项目可以很方便切换调试。


最后,讲一下 FFmpeg 的 ​​doc​​​ 目录的文档作为扩展知识,​​doc​​​ 里面其实有很多非常有用的文档,例如 ​​ffmpeg.txt​​ 就画了一个流程图给你看,如下:

FFmpeg二次开发_命令行_06

上图其实是 ​​ffmpeg.c​​ 文件的一部分逻辑流程。


还有一些其他的文档,如下:

1,doc/build_system.txt,编译 FFmpeg 的一些教程。

2,doc/filter_design.txt ,filter 滤镜的设计原理。

3,doc/writing_filters.txt,如何自己写一个滤镜加进去 FFmpeg。

4,doc/issue_tracker.txt,FFmpeg 的 bug 或者 feature 的跟踪流程

5,doc/multithreading.txt,FFmpeg 里面的多线程,有两种,Slice threading 跟 Frame threading

6,doc/optimization.txt ,编解码器的优化方法,FFmpeg 还有一部分函数是可以用汇编 SIMD 优化,他的一些函数如果被优化得晦涩难懂,可以查看早期的 ​​gitlog​​。

7,doc/rate_distortion.txt,对失真率的简单讨论。

8,doc/swscale.txt ,The official guide to swscale for confused developers.


分析完毕,我要去抄 ​​ffmpeg.c​​ 的代码了。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
1bTlX33AWdQ4