FFmpeg二次开发

news/2025/2/13 2:09:47/

本文主要讲解 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等技术内容,立即学习


http://www.ppmy.cn/news/1385.html

相关文章

MySQL 中的 sql_mode 选项以及配置

MySQL 中的 sql_mode 选项以及配置 目录MySQL 中的 sql_mode 选项以及配置一、查询与设置 sql_mode1、查询 sql_mode2、设置 sql_mode(1)通过命令设置(2)在配置文件中设置二、sql_mode 支持的模式1、ANSI 模式(宽松模式…

html5期末大作业:基于HTML+CSS技术实现——传统手工艺术雕刻网站(3页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

(附源码)node.js电商管理系统 毕业设计 251001

node.js电商管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,电商管理系统当然也不能排除在外。电商管理系统 是以实际运用为开发背景,运用软件工程开…

用Python做个学生管理系统,这不简简单单

前言 最近因为疫情,各大高校都开始放假了,要不就是回家上网课 我朋友的老师真有趣,硬是要我朋友做个学生管理系统打包成exe文件发给他,才能回家 这不就找上我来了,我写完就顺便发篇文章咯 准备工作 环境准备 Pyth…

html静态网站基于游戏网站设计与实现共计10个页面 (仿地下城与勇士游戏网页)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Springboot整合mybatis多数据源

Mybatis中如何配置多数据源 一 什么情况下会用到多数据库? 场景1: 一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站的产品数据,这种情况…

OpenCV3图像处理笔记

此笔记针对 Python 版本的 opencv3,c 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c 的 mat 模板类型。注意,因为 python 版本的opncv只提供接口没有实现,故函数原型还是来自 c版本的opencv…

(AtCoder Beginner Contest 280) E - Critical Hit (经典的组合数学问题)

题意: 初始n,每次有p100\frac{p}{100}100p​的概率减少2,1−p1001-\frac{p}{100}1−100p​的概率减少1. 问最后n小于等于0的 期望步数。 思路: p2p100p2\frac{p}{100}p2100p​: 减少2的概率 p11−p100p11-\frac{p}{100}p11−100…