• FFmpeg二次开发


    FFmpeg 的社群来了,想加入微信社群的朋友请购买《FFmpeg原理》VIP版 电子书,里有更高级的内容与答疑服务。


    本文主要讲解 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,这里还有一个地方需要修改。

    1. ffmpeg_deps="avcodec avfilter avformat"
    2. ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
    3. hflip_filter null_filter
    4. transpose_filter trim_filter vflip_filter"
    5. ffmpeg_suggest="ole32 psapi shell32"
    6. ffplay_deps="avcodec avformat swscale swresample sdl2"
    7. ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
    8. ffplay_suggest="shell32"
    9. ffprobe_deps="avcodec avformat"
    10. 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 的代码了。

  • 相关阅读:
    Java方法的使用
    Postman API测试工具的使用
    面试经典150题——Day13
    现在Web前端工程师年薪区间是多少?
    16.SpringBoot前后端分离项目之简要配置一
    vulfocus——struts2-cve_2017_9791
    医疗卫生行业涉及的信息数据元属性与值域代码(数据集)
    scanf(“%s“, filename);这里的scanf函数中,“,”逗号符号后面什么时候需要用“&”这个符号,什么时候不需要用这个“&”符号?
    汪源:数据分析热词迭出,“三个统一”值得关注
    私藏!资深数据专家SQL效率优化技巧
  • 原文地址:https://blog.csdn.net/u012117034/article/details/128157461