在Windows下使用shell编译自己的FFmpeg库

前言

之前在Windows下编译过FFmpeg库,但是编译出来的DLL库不仅个数多达7个,而且库总大小高达几十兆。现经过研究,使用shell脚本根据自己的需要编译自己的FFmpeg库,不仅可以编译出来一个自己命名的DLL,而且大小可以减小到10MB以下。

1、下载

1.1、下载ffmpeg

在https://github.com/FFmpeg/FFmpeg/tree/master下载zip压缩包即可,我下载的是n6.1.1版本

1.2、下载Visual Studio

在Microsoft官网下载VS,我下载的是Visual Studio Professional 2022

1.3、下载msys2

在https://www.msys2.org/下载msys2工具,我下载的是msys2-x86_64-20240113版本

2、安装

2.1、安装ffmpeg

将zip解压至D:\workspace\build\FFmpeg-n6.1.1

2.2、安装VS2022

自行选择安装,我不习惯到C盘,选择安装到D盘

2.3、安装msys2

安装到C:\msys64;
将msys2_shell.cmd中rem set MSYS2_PATH_TYPE=inherit改为set MSYS2_PATH_TYPE=inherit,这样可以从中环境%PATH%读取变量;
再把usr\bin中link.exe改为link.exe.bak,这样可以使用VS自带link.exe进行链接。
使用x86 Native Tools Command Prompt for VS 2022输入C:\msys64\msys2_shell.cmd,打开msys2之后输入下面命令更新并安装工具:
pacman -Syu
pacman -Su
pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S nasm

3、编译

3.1、设置全局环境,包括cl.exe以及ffmpeg头文件

/* 在Path中添加cl.exe所在文件夹路径。若未找到,可以在VS的安装目录下搜索cl.exe */
D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x86;

/* 在系统变量中新建变量INCLUDE,添加ffmpeg、cl.exe包含头文件目录 */
D:\workspace\build\FFmpeg-n6.1.1;
D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\include;
D:\Windows Kits\10\Include\10.0.22000.0\shared;
D:\Windows Kits\10\Include\10.0.22000.0\ucrt;
D:\Windows Kits\10\Include\10.0.22000.0\um;
D:\Windows Kits\10\Include\10.0.22000.0\winrt;

/* 在系统变量中新建变量LIB,添加cl.exe库文件目录 */
D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\lib\x86;
D:\Windows Kits\10\Lib\10.0.22000.0\ucrt\x86;
D:\Windows Kits\10\Lib\10.0.22000.0\um\x86;

3.2、编写source桥接文件.h和.c

编写桥接头文件myffmpeg.h

#ifndef __MY_FFMPEG_H__
#define __MY_FFMPEG_H__

#include "libavutil/mem.h"
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include "libavutil/mathematics.h"
#include "libavutil/time.h"

#include "libavcodec/avcodec.h"
#include "libavcodec/packet.h"

#include "libavformat/avformat.h"

#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"

#include "libswscale/swscale.h"

#include "libswresample/swresample.h"

#include "libavdevice/avdevice.h"

#ifdef _WIN32
#define MYFFMPEG_EXPORT __declspec(dllexport)
#else
#define MYFFMPEG_EXPORT __attribute__((visibility("default")))
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值