FFmpeg下载编译、代码结构以及编译系统
从这里开始,就要踏上学习FFmpeg的旅程了,使用的FFmpeg版本5.0.1
1、ubuntu下,如何下载并编译FFmpeg源码
打开FFmpeg官网 Download FFmpeg,我们可以通过git来下载源码
$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
也可以拉到页面底部,查看不同的FFmpeg版本,按需下载压缩包。我这里是下载的5.0.1版本的压缩包,执行命令解压
$ tar xvf ffmpeg-5.0.1.tar.xz
进入到工程目录下执行以下命令,可以获取到很多帮助信息
$ ./configure --help
我这里就用默认配置,不去添加或删除模块,执行以下命令指定保存编译结果的路径,这里的路径得用绝对路径(第一次使用~代码home,编译完没有找到编译结果)
$ ./configure --prefix=/home/xxx/work/ffmpeg-5.0.1/out
执行make 和 make install
$ make -j4 #编译
$ make install #将结果拷贝到out目录
生成如下内容

bin中是可执行程序,包括有ffplay以及ffprobe
include是编译用到的头文件
lib中是编译生成的静态库,如果想生成动态库可以通过执行configure来配置
share中是生成的操作手册
2、代码结构

FFmpeg的代码结构相当的工整!不由的想感慨一下,真是个艺术品!
compat目录:如其名字该目录是为了兼容不同平台儿创建的,有很多的头文件
ffbuild目录:存放了configure的配置文件以及相关的makefile文件
fftools目录:存放有ffplay以及ffprobe的源码
libavcodec目录:编码和解码库源码所在路径
libavdevice目录:与设备相关的代码,比如sdl显示设备、alsa音频输出设备、opengl图像加速设备、v412视频采集设备
libavfilter目录:
libavformat目录:复用和解复用代码库
libavutil目录:工具库
libpostproc目录:后其处理库
libswresample目录:音频重采样,格式转换和混合库
libswscale目录:颜色空间转换和大小尺寸缩放代码库
3、windows下如何编译ffmpeg
网上资料层出不穷,踩了很多坑,最后还是没有编译成功!
a. 首先安装mingw,并在环境变量中添加

b.安装MSYS2环境,这里主要是参考的博文 MSYS2+mingw 编译 ffmpeg 在windows下完整过程_坚持学习不能松懈的博客-CSDN博客_msys2编译windows程序
基本参考上面的博文之后就没有什么问题了,但是我在configure时碰到以下错误 gcc is unable to create an executable file,这是因为上面的环境变量没有正确添加,添加完之后重启电脑就OK了。
configure的步骤和linux下基本相同,接着执行make,报错 cc1: some warnings being treated as errors,我直接将ffbuild/config.mak中CFLAGS中的-Werror都删掉了,虽然不讲武德,但好歹是可以继续编译了。
后续的编译又有层出不穷的问题,先搁置,等有空了再来整理一下gcc环境!
还好官网有提供现成的dll和lib给我们使用!使用方法可以参考 VS下搭建FFmpeg开发环境_奋斗吧!骚年!的博客-CSDN博客
4、编译系统
参考 ffmpeg-makefile编译分析_Loken2020的博客-CSDN博客_ffmpeg makefile
FFmpeg下载编译、代码结构以及编译系统的更多相关文章
- PDFium-PDF开源之旅(1)-初探代码下载编译
近日,Google和Foxit合作开源了Foxit的PDF源代码. 叫PDFium 相关新闻不少.哈,虽说已经不是程序猿了.只是还是有兴趣跑起来围观看看.废话少说.先说编译代码的步骤(事实上Googl ...
- Android webRTC 代码下载编译
1.安装depot tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 然后把把depot ...
- Android 程序分析环境搭建-Android 9 -代码下载编译
Android 9 -代码下载编译 一,翻墙下载: 1.背景: 背景: 现在Android framework 开发的同学,整体在公司里面解一些无关痛痒的bug,对于Android framework ...
- CEF3开发者系列之工程和代码结构
CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去.它的设计思想就是易用且兼顾性能. CEF3支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去.它的 ...
- 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)
一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^. 转载请注明出处http: ...
- ffmpeg.c简单的结构功能分析(平局)
当转码的研究看前一阵子FFmpeg资源. 因为ffmpeg.c与此相反的较长的代码.而有相当一部分人AVFilter相关代码(这部分已经不太熟悉),所以学习之前FFmpeg时间,还没有好好看看它的源代 ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- ffmpeg音频播放代码示例-avcodec_decode_audio4
一.概述 最近在学习ffmpeg解码的内容,参考了官方的教程http://dranger.com/ffmpeg/tutorial03.html,结果发现这个音频解码的教程有点问题.参考了各种博客,并同 ...
- Maven编译代码的相关命令
第一.main目录下的主代码编写完毕后,使用Maven进行编译,在项目根目录下运行命令mvn clean compile进 行项目编译. 第二.test目录下的测试用例编写完毕之后就可以调 ...
- To IOC,代码结构演变的随想
代码结构演变 项目开始阶段 需求: 提供一个系统,可以在新春佳节之际以邮件的形式给员工发送新春祝福. 开发人员: 张三 版本一 string msg = "新年快乐!过节费5000.&quo ...
随机推荐
- mysql 必知必会整理—全球化与本地化[十六]
前言 简单介绍一下字符集. 数据库表被用来存储和检索数据.不同的语言和字符集需要以不同的方式存储和检索. 因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法. 字 ...
- 重新整理 .net core 实践篇—————应用分层[二十四]
前言 简单整理一下分层. 正文 应用程序分层,分为: 1.领域模型层 2.基础设施层 3.应用层 4.共享层 共享层 共享层一般包括下面几个类库. 有一个Core 的类库,比如说BLog.Core. ...
- 《Effective C#》系列之(二)——如何使代码易于阅读和理解
在<Effective C#>这本书中,使代码更易于阅读和理解是其中一章的主要内容.以下是该章节的一些核心建议: 使用清晰.有意义的名称:变量.方法.类型等的名称应该能够准确地描述其含义, ...
- 力扣605(java&python)-种花问题(简单)
题目: 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 ...
- Redis 数据类型list以及使用场景
简介: Redis 数据类型list以及使用场景 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序list类型:保存多 ...
- [FAQ] Beego2.0.2 bee 生成的 api 项目运行 404, http server Running on http://:8080
Beego, bee version 2.0.2 https://github.com/beego/beego/issues/4363 Tool:AI 编程助手 Refer:Beego还流行吗 Lin ...
- Sentinel如何持久化数据到Nacos?
默认情况下 Sentinel 只能接收到 Nacos 推送的消息,但不能将自己控制台修改的信息同步给 Nacos,如下图所示: 但是在生成环境下,我们为了更方便的操作,是需要将 Sentinel 控制 ...
- 011_元件封装FootPrint处理
011_元件封装FootPrint处理 原理图的引脚与PCB的引脚数量一一对应,IC的PCB Foot Print属性添加好属性,后面就不用一个个添加了.
- 004—Orcad创建简单分裂元件
004-Orcad创建简单分裂元件 以TPS545为例,先查看datasheet,管脚图,PCB封装.新建库,设置名称和part的数量,然后添加管脚,设定管脚属性.电源管脚要勾选Pin Visble. ...
- VUE中具名插槽和匿名插槽的使用
在我的项目中由于使用的是vue+element一个自用框架进行开发,插槽用法相较简单 比如在列表字段columns使用slotname即可 <template v-slot:_spec=&quo ...