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

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

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

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

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

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

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

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

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

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

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

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

TODO,这里还有一个地方需要修改。

ffmpeg_deps="avcodec avfilter avformat"
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filterhflip_filter null_filtertranspose_filter trim_filter vflip_filter"
ffmpeg_suggest="ole32 psapi shell32"
ffplay_deps="avcodec avformat swscale swresample sdl2"
ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
ffplay_suggest="shell32"
ffprobe_deps="avcodec avformat"
ffprobe_suggest="shell32"

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

上图其实是 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 的代码了。


推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:

Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

FFmpeg二次开发相关推荐

  1. 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)...

    前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...

  2. VLC播放器Demo(录像,截图等功能),Android播放器Demo可二次开发。ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发。

    VLC播放器Demo(录像,截图等功能),可二次开发. ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发. 如果帮助的到了您,请您不要吝啬你的Star,先谢谢 ...

  3. 海康大华天地伟业网络摄像头chrome浏览器web二次开发

    海康大华天地伟业网络摄像头chrome浏览器二次开发 海康大华天地伟业网络摄像头chrome浏览器web二次开发 由于工作的原因需要开发海康和大华,还有天地伟业的摄像头,而且必须是本地部署开发,每个厂 ...

  4. 语音控制+人脸识别——二次开发 Parrot 无人机!

    继"如何用100美元和 TensorFlow 来造一个能'看'东西的机器人" 之后,Lukas 又一最新力作. 在"造"出能进行物体识别的机器人后,下一步就很清 ...

  5. 音视频开发6. 搭建 ffmpeg Linux远程开发环境

    音视频开发6. 搭建 ffmpeg Linux远程开发环境 一.准备环境 二.操作步骤 1. 在CentOS 编译安装 ffmpeg 2. 编译安装ffmpeg后的环境 3. 本地在vscode安装 ...

  6. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  7. 20150411--Dede二次开发-01

    20150411--Dede二次开发-01 目录 一.目前市场流行的电子商城系统 1 二.ecshop的介绍 1 三.安装 2 四.echsop 的目录结构 5 五.分析ecshop里面程序的架构 5 ...

  8. android系统二次开发,Andorid系统二次开发界面

    Andorid系统二次开发界面 给大家介绍完外观,下面我们一起再来看下魅族MX的系统界面.本次魅族MX仍然采用的是Andorid操作系统,并且加入了二次开发界面.UI界面整体上保持了和M9的特色,不过 ...

  9. wordpress php教程 pdf,wordpress二次开发全能教程.pdf

    wordpress 二次开发全能教程 1. 根据分类来制定导航条 A. 修改页面 header.php! <?php wp_list_categories('title_li='); ?> ...

最新文章

  1. NodeJS是用来做什么的
  2. io多路复用的原理和实现_IO多路复用的三种机制:select 、poll 、epoll
  3. xx是一个类型 这在给定的上下文_BERT, ELMo, amp; GPT-2: 这些上下文相关的表示到底有多上下文化?...
  4. 【~~~】POJ-1006
  5. 第一代计算机主要用于科学计算和数据处理,计算机一级第一章练习题.doc
  6. directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
  7. 77GHz毫米波雷达快速chirp信号技术(三):测角原理
  8. m 序列性质的简单证明
  9. malloc函数的用法详解:
  10. select_io(LVDS) 参数设置与物理层的对应关系
  11. uniapp H5端与APP端压缩图片
  12. 物联网嵌入式——学习分享
  13. 伊利诺伊理工大学舒凯招收多名全奖博士生
  14. 大数据分析原地踏步 原来是分析工具面临信任问题
  15. 泪目!上海00后小伙AI「复活」奶奶,100%还原音容笑貌,却引发巨大争议
  16. MySQL 格式化日期(DATE_FORMAT)
  17. MATLAB群智能开源第十五期-闪电优化算法(LAPO)
  18. 【Rust 日报】2022-04-10 适用于Rust的异步CQL驱动
  19. 基础平台项目之集成Jquery.pagination.js实现分页
  20. .Net开发 开发工具使用vs C盘占用空间不断增大

热门文章

  1. ts中any 、unKnown的区别
  2. Duplicate entry问题
  3. Map集合及遍历 debug用法 以及集合的斗地主应用练习 D190326
  4. arduino 与java通信_在Java应用程序与Arduino Uno之间建立串口连接
  5. [R语言]R包的安装帮助获取
  6. 14-Time/Watermarker
  7. 图形界面介绍Violation Browser
  8. 从底层了解ASP.NET体系结构
  9. C++小知识——VS2013 MFC基于对话框编程
  10. 图文解读Fcoin发布的FT公链