ffmpeg windows编译动态库、静态库

news/2024/7/10 19:20:03 标签: windows, ffmpeg

1 前言

FFmpeg在Linux/Mac下编译比较简单,但是在Windows平台下编译确是一步一个坑,稍不注意就会掉进去,费时费力。之前4月份的时候在公司没编译出来,直接用的别人编译好了的库做的开发,现在有时间了,花了半天的时间编译成功,包括Windows下.lib和.dll,使用Android NDK编译生成的静态库.a和动态库.so。

2 准备工作

这应该是所需要的最少的软件和配置:

①MSYS2(重要!):https://www.msys2.org/, 傻瓜式安装,但是要自己配置环境变量,下载后在开始菜单能看到如下4个程序,我们使用的是MSYS2 MinGW 64-bit,我的安装目录是E:\msys64

②FFmpeg源码:http://ffmpeg.org/download.html,直接下载最新的就可以,解压后放到E:\msys64\home\ivan(如果你是C盘就放C:\msys64\home\你的用户名)
③Git:https://git-scm.com/download/win ,下载安装下一步就行,会自动配置环境变量
④x264源码:https://www.videolan.org/developers/x264.html,为了支持ffmpeg的H264编解码必须先编译这个,也是放在E:\msys64\home\ivan,此时该目录是这样的:

另配置的环境变量:

3 Windows下编译FFmpeg

①首先编译x264:以管理员方式启动MSYS2 MinGW 64-bit,MSYS2是Windows下的Linux模拟器,支持绝大多数的Linux命令,软件包管理器是pacman,首先安装mingw工具链:
pacman -S mingw-w64-x86_64-toolchain
按下Enter默认全部安装,如果速度慢的话可以切换中科大镜像源。
其他需要的还有:

pacman -S base-deve1
#下面的可能需要,还是前面两句已经集成了,反正装也不费事
pacman -S yasm nasm gcc

②编写编译脚本build.sh,用一个系统变量来代替路径比较好些:

           touch build.sh

脚本内容如下:

basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}/x264-master
pwd


./configure --prefix=${basepath}/x264_install --enable-static
make 
make install

执行脚本:

            sh build.sh

经过一段时间的等待,安装完成,进入E:\msys64\home\Ivan\x264_install\lib,发现libx264.a静态库已经编译得到了:

截图 (4).png

③编译FFmpeg源码:

basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}/x264-master
pwd



cd ${basepath}/ffmpeg-4.4
pwd



./configure --prefix=${basepath}/ffmpeg_install --enable-static --disable-shared  \

--extra-cflags=-l${basepath}/x264_install/include 
--extra-ldflags=-L${basepath}/x264_install/lib

make
make install

这样执行脚本得到的是静态库,如果要得到动态库,
就把--enable-static --disable-shared改成--disable-static --enable-shared,得到的库如下:

4 用Android NDK编译FFmpeg

①准备工作同上面所讲,额外下载Android NDK:https://developer.android.google.cn/ndk/downloads/,下载后解压到E:\msys64

②编写编译脚本:这里我新建了个ffmpeg解压后的文件夹,所以安装的目录写为ffmpeg2_install

basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}/x264-master
pwd



cd ${basepath}/ffmpeg
pwd


./configure --prefix=${basepath}/ffmpeg2_install --enable-static --enable-shared \
--enable-cross-compile 
--target-os=android --arch=arm \
--cc=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/armv7a-linux-androideabi21-clang \
cross-prefix=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/arm-linux-androideabi- \


make
make install

编译过程可以看到主要的7个库,还有编码格式,如音频的aac,opus等,视频的h263,h264,vp8,vp9等

经过漫长的等待,编译好后的文件夹如图:


http://www.niftyadmin.cn/n/1045977.html

相关文章

33、深入理解Java的接口和抽象类

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使…

html5+go+websocket简单实例代码

这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,最朴实的来实现效果,主要目的是分享下h5怎么用websocket,go搭建websocket服务的主要部分。 go代码部分: 1 // W…

Global Mapper概述(转载)

GlobalMapper是一款功能强大的小型化GIS栅格影像、矢量数据处理、加工软件,其本身具备了GIS软件产品的几乎所有特性,做到了将复杂的问题简单化,哪怕你是对GIS一无所知的用户都可以很快的上手,简单直观的功能设计都能够帮助你以最快…

ffmpeg 命令行 pcm 编码 MP3

MP3截取 ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec copy output_mp3.mp3 参数说明-y允许覆盖-i test.mp3源文件-ss 00:00:00开始时间-t 00:00:03结束时间-acodec copy编码格式复制 mp3转pcm ffmpeg -y -i test.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 160…

SolrCloud分布式集群部署步骤

http://www.mamicode.com/info-detail-892923.html Solr及SolrCloud简介Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也…

面试常问题目

1、你有哪些缺点和缺点? 2、你在项目中遇到最难的问题是什么,怎么解决的? 3、你有什么问题要问我

Hibernate工作原理及为什么要用?

原理&#xff1a;1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping resource"com/xx/User.hbm.xml"/>读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.…

C++内存泄漏检测

valgrind --toolmemcheck --leak-checkfull --log-filereportlead ./ifly_audiocoding.out