mingw(msys2)编译ffmpeg

article/2025/4/20 3:18:23

mingw(msys2)编译ffmpeg

首先要确保pacman环境是最新的,否则会出现莫名其妙的问题,可以执行“pacman -Syu”更新包

安装mingw:

pacman -S gcc mingw-w64-i686-toolchain yasm mingw-w64-i686-SDL2 //mingw32
pacman -S gcc mingw-w64-x86_64-toolchain yasm mingw-w64-x86_64-SDL2 //mingw64
pacman -S make

编译fribidi

首先从github clone代码:https://github.com/fribidi/fribidi
./autogen.sh //生成configure文件
./configure --prefix=/usr/local/fribidi
make
如果make时出现报错: undefined reference to `fribidi_char_set_name’ …, 我照着这个方法
https://github.com/fribidi/fribidi/commit/7c155c64ea91d9ad3a25cdf35c904e4cb2484448
改了代码,结果还是不行,最后重新从github clone代码下来,重新执行上述命令,竟然通过了…
如果出现“missing automake…”,或者提示automake版本不一致,参考
https://blog.csdn.net/hubbybob1/article/details/109244833,但我并没有成功,最后是重新down代码下来,编译通过
另外,很大可能以上问题你都不会遇到
make install

编译好后这个样子:
在这里插入图片描述

编译harfbuzz

github地址:https://github.com/harfbuzz/harfbuzz
./autogen.sh
./configure --prefix=/usr/local/harfbuzz
make

若提示,
在这里插入图片描述

则需要安装ragel,
32位 “pacman -S mingw-w64-i686-ragel”
64位:“pacman -S mingw-w64-x86_64-ragel
*/
make install

编译freetype

从官网下载源码:https://download.savannah.gnu.org/releases/freetype/
(也可以去github下载编译好的window版本,https://github.com/ubawurinna/freetype-windows-binaries)
./autogen.sh //生成configure文件
./configure --prefix=/usr/local/freetype
make
make install

编译好后这个样子:
在这里插入图片描述

编译libxml2

从gitlab下载源码:https://gitlab.gnome.org/GNOME/libxml2/
./autogen.sh
./configure --prefix=/usr/local/libxml2 --without-python
make
make install

编译fontconfig

从gitlab下载源码:https://gitlab.freedesktop.org/fontconfig/fontconfig
需要先安装gperf,pacman命令:pacman -S gperf

./autogen.sh
export PKG_CONFIG_PATH=/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/fontconfig --disable-docs --enable-libxml2
make
make install

编译libass

为什么要编译libass?因为subtitle filter需要用到libass去解码字体
export PKG_CONFIG_PATH=/usr/local/fontconfig/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fribidi/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH
./autogen.sh
./configure --prefix=/usr/local/libass
make
make install

编译libx264

(可选,ffmpeg自带x264解码,但不能编码)
./configure --prefix=/usr/local/libx264 --enable-shared
如果出现找不到c编译器的情况,首先确保gcc已经安装,再者如果是用mingw32去编译x264,则默认的gcc指令是
“gcc -m64…”,所以必须configure的时候指明host, 感谢这名博主的文章https://blog.csdn.net/fly_520/article/details/80625844*/
./configure --prefix=/usr/local/libx264 --enable-shared --host=i686-w64-mingw32 //mingw32
./configure --prefix=/usr/local/libx264 --enable-shared --host=x86_64-w64-mingw32 //mingw64,不用怀疑,确实叫“x86_64-w64-mingw32”不是“x86_64-w64-mingw64”,这一点我也很疑惑,有大佬明白的,麻烦告知一下
make
make install

编译ffmpeg

(当然如果你不需要libass支持, libx264编码,上面的库都可以不要,最简单的configure命令:./configure --prefix=…/build32 --disable-static --enable-shared --enable-sdl,另外你连sdl都可以不到,需要sdl是因为ffplay需要sdl的支持,编译之前执行pacman -S mingw-w64-i686-SDL2 或者pacman -S mingw-w64-x86_64-SDL2)
编译命令:
export PKG_CONFIG_PATH=/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fontconfig/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fribidi/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libass/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libx264/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --disable-static --enable-shared --enable-sdl --enable-gpl --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libass --enable-libx264 --enable-decoder=h264 --enable-encoder=libx264
make
make install

最后可以用到项目上了 ,我把ffplay拆分了一下,逻辑更清晰一些。github地址:https://github.com/lanbudao/ffplay
另外一个用c++写的播放器项目,参考了qtav和ffplay,视频渲染用的opengl,可以用到多个平台,github地址:https://github.com/lanbudao/ffproc (这个项目目前还处于开发阶段,但基本的播放功能都能用了)。

最后的最后,想偷懒,这里有编译好的32位的库https://download.csdn.net/download/theartedly/13625235,不需要币。


http://chatgpt.dhexx.cn/article/0RlMiYKr.shtml

相关文章

Hyperscan Windows 编译指南

Hyperscan Windows 编译指南 Hyperscan 源码下载:https://www.hyperscan.io/准备环境: Windows 10 X64 Cygwin : https://www.cygwin.com/ CMake:https://cmake.org/ Visual Studio 2017 Python (2.7 版本) Boost : https://www.boost…

Hyperscan 5.4.0 安装教程 (CentOS7环境)

参考:Getting Started — Hyperscan 5.4.0 documentationhttp://intel.github.io/hyperscan/dev-reference/getting_started.html 目录 1.下载 2.安装环境配置 2.1 硬件需求 2.2 软件需求 3.安装 3.1 创建构建目录 3.2 设置编译选项 3.3 构建hyperscan 4.安…

Hyperscan 安装

源码下载 Ragel :http://www.colm.net/files/ragel/ragel-6.9.tar.gz boost :http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.gz hyperscan : https://download.csdn.net/download/u014608280/12745509 第…

centos 8 编译安装hyperscan

一、编译安装环境配置 官方文档: http://intel.github.io/hyperscan/dev-reference/getting_started.html 1.1硬件配置 配置参数CPUIntel Xeon Gold 5218R CPU 2.10GHzCPU核数8核 注:需要满足以下条件 1、X86架构 2、Supplemental Streaming SIMD E…

ubuntu20.04下源码安装hyperscan库安装记录

安装测试环境: vmware-ubuntu20.04,gcc 4.8.5,ragel-6.10.tar.gz,boost_1_69_0.tar.gz,hyperscan-5.1.0.tar.gz 1.安装ragel(必须的依赖包)1MB: 下载地址:http://www.…

基于CentOS 8 系统环境下的 Snort 3 安装指南

O、 阅读要求 本教程并不适合初学者,大家在阅读本文之前,需具备CentOS 8 Linux、Snort 2.9的成功安装经验。本次安装对网络依赖很大,所以大家一定要将网络状态调节好,本指南介绍的内容,仅在测试环境中使用。 一、环境…

msys2+mingw64+ragel安装

[msys2mingw64ragel安装] [简介] 这几天部门老大让解析几个东西,要求用ragel编写,在Windows环境下,要运用到mingw64,安装时发现mingw里没有pacman,需要现安装,然后发现Wget也没有。。。,所以改…

Ragel State Machine Compiler 的速度测试

据说Ragel生成的自动机程序,速度飞快,特地测试了一下,所得结果如下。 测试环境: VC6 Release下编译 测试规模: 一亿次 测试用例: Ragel编译r_atoi.rl文件 vs crt lib的 atoi函数 测试结果&…

Hello Ragel -- 生成状态机的神器

Ragel 是个很 NB 的能生成状态机的编译器,而且支持一堆语言:C、C、Object-C、C#、D、Java、Go 以及 Ruby。 原来的文本解析器是用正则表达式实现的,随着状态(if-else)越来越多,修改越来越麻烦。。。 安装 M…

嵌入式系统开发流程

一、嵌入式系统开发流程 1、系统需求分析:根据需求,确定设计任务和设计目标,指定设计说明书。 2、体系结构设计:描述系统如何实现所述的功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型。 …

嵌入式系统开发设计

嵌入式系统开发设计 嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。系统架构既包括软件系统架构也包括硬件系统架构。 嵌入式系统设计具有以下特点: 软、硬件协同并行开发; 微处理器的类型多种…

嵌入式系统的概念,嵌入式系统的组成及特点,嵌入式系统的基本开发流程

1. 嵌入式系统的概念 嵌入式系统( Embedded system) , 是一种 "完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 2 . 嵌入式系统的组…

配置嵌入式系统开发环境(教程)

配置嵌入式系统开发环境 前言一. 安装VMware Workstation?二、在虚拟机中安装Windows XP镜像1.创建虚拟机启动虚拟机进入PE系统 关于pdf中预实验的补充说明 前言 嵌入式实时操作系统及应用开发(第三版)罗蕾主编光盘镜像 链接:htt…

嵌入式Linux系统开发笔记(七)

嵌入式Linux系统开发笔记(七) 七、U-Boot基础 1.概述 在移植 Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核, bootloader有很多,常用的就是 U-Boot。 移植好 U-Boot 以后再…

迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习

iTOP-IMX6ULL核心板采用单核Cortex-A7架构,主频高达528 MHz,CPU集成电源管理,146 PIN引脚全部引出。核心板接口引出串口8路、CAN 2路、网口2路、I2C1路、SPI 2路、PWM8路、ADC5路、USB1路等功能。核心板在IMX6UL开发板上进行了深度优化&#…

Vxworks嵌入式开发系统入门基础概念学习

1.VxWorks应用 自动化设备、工业控制(实时性好)、军用设备以及消费电子。 2.实时性 实时性包括硬实时、软实时。硬实时系统有一个刚性的、不可改变的deadlines,它不允许任何超出deadlines的错误。而软实时是一个柔性灵活的,它可以…

嵌入式系统的开发流程

嵌入式系统的开发流程 摘要:本文以 HHARM9-EDU为例,简要说明一下嵌入式系统的开发流程。 整个流程很简单,流程图如下: 一、配置Linux及MINIGUI ①配置Linux: 由于 HHARM9-EDU推荐使用Redhat 9,所以这里只介…

嵌入式开发系统的简介

小白日志(一) 嵌入式开发系统的简介 嵌入式系统是一种以硬件为载体,以计算机技术为基础,以应用程序为核心,满足特定功能、要求以及应用环境的专用计算机系统。所谓“嵌入式”,顾名思义,嵌入到…

嵌入式系统开发环境概述

嵌入式系统开发环境主要包括: 集成开发工具交叉编译器批处理文件makefileLink Script调试工具下载工具其它工具(Offline Tools)模拟器版本控制工具 接下来分别讲解以上各个工具: 1、集成开发工具 一般CPU厂商会提供针对该CPU的集成开发环境(IDE)&…

嵌入式系统概述3-嵌入式系统的开发流程和学习基础、方法

嵌入式系统的开发流程 以带有操作系统的32位微处理器为核心的嵌入式系统为例: 第一步:建立开发环境 操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-linu…