• 【FFMPEG】Windows下将ffmpeg编译成lib和dll完整教程


    安装msys2

    msys2是一个交叉编译环境,允许在windows上模拟linux运行环境

    再利用linux软件,编译出lib和dll

    msys2的安装包,包括编译过程中用到的安装包,在下面有完整提供

    lib和dll的使用方式

    lib和dll都可以存储已经封装好了的代码,它们的区别在于

    lib是静态库,在编译时使用,lib中的代码会被编译到exe当中

    dll是动态库,在运行时使用,dll中的代码不参与编译,而是运行期间,到对应的dll文件当中去查找函数

    使用静态链接方式时,只提供lib文件即可,这种情况下,lib文件包含完整代码,体积特别大

    使用动态链接方式时,需要同时提供lib文件和dll文件

    这种情况下,lib文件不存储代码,只存储dll文件中函数的调用地址,因此体积比较小,代码存于dll当中

    编译时使用lib文件,而程序运行时,必须把对应的dll放在exe旁边,或者是系统目录中才行

    ffmpeg的体积比较大,而且复用性比较强,基本都是通过动态链接的方式来使用的

    安装和配置pacman

    pacman是linux下的一个包管理器,方便从在线仓库自动安装和管理软件

    打开msys2.exe,输入以下指令,全部选Y同意

    pacman -Syu

    安装完成后,窗口会自动退出,重新打开msys2.exe,再次输入以下指令

    pacman -Syu

    分别打开mirrorlist.clang32,mirrorlist.clang64,mirrorlist.msys三个文件

    在配置文件的开头分别加入以下代码,将软件仓库的首选地址改为国内站点

    
    	##  清华大学
    	Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
    	## 中科大
    	Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
    	
    	## 清华大学
    	Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
    	## 中科大
    	Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
    	
    	## 清华大学
    	Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
    	## 中科大
    	Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    安装依赖包

    打开msys2.exe,输入以下指令,安装依赖

    pacman -S make
    pacman -S diffutils
    pacman -S yasm
    pacman -S nasm
    pacman -S mingw-w64-x86_64-gcc
    pacman -S mingw-w64-i686-gcc
    pacman -S mingw-w64-x86_64-gtk3
    pacman -S mingw-w64-i686-gtk3
    pacman -S git

    下载pkg-config

    pkg-config是一个软件包配置管理工具,通过它可以记录软件包的版本和安装路径

    软件下载可以通过wget指令来进行

    wget下载的文件,会被保存到msys2/home/用户名下,再手动解压即可

    打开msys2.exe,执行以下指令

    wget https://pkg-config.freedesktop.org/releases/pkg-config-0.23.tar.gz

    将压缩包中的pkg-config-0.23目录解压到msys2/home下

    将pkg-config/win32/bin/pkg-config.exe拷贝到msys2/mingw32/bin下

    将pkg-config/win64/bin/pkg-config.exe拷贝到msys2/mingw64/bin下

    下载ffmpeg

    打开msys2.exe,执行以下指令

    wget http://www.ffmpeg.org/releases/ffmpeg-4.3.5.tar.gz

    将压缩包中的ffmpeg-4.3.5目录解压到msys2/home下

    下载x264

    打开msys2.exe,执行以下指令

    wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2

    将压缩包中的x264-master目录解压到msys2/home下

    下载amf

    打开msys2.exe,执行以下指令

    wget https://github.com/GPUOpen-LibrariesAndSDKs/AMF/archive/1.4.16.1.tar.gz

    将压缩包中的AMF-1.4.16.1目录解压到msys2/home下

    手动创建msys2/usr/local/include/AMF目录,再打开msys2.exe,执行以下指令

    cp -r /home/AMF-1.4.16.1/amf/public/include/* /usr/local/include/AMF

    安装ffnvcodec

    git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
    cd nv-codec-headers
    make & make install

    编译64位dll

    这里以64位为例,32位同理,只不过改用mingw32程序,将脚本中的64改成32就行了

    打开msys2/mingw64.exe,输入以下指令编译x264

    
    	cd /home/x264-master/
    	
    	./configure \
    	--prefix=/mingw64 \
    	--enable-static \
    	--host=msys \
    	--disable-cli
    	
    	make clean
    	make -j4
    	make install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    打开msys2/home/ffmpeg-4.3.5目录,新建build.sh文件,输入以下脚本

    
    	#!/bin/bash
    	PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
    	PREFIX="./bin-$1"
    	echo "Install dir: $PREFIX"
    	./configure \
    	--prefix=$PREFIX \
    	--extra-ldsoflags="-static-libgcc" \
    	--extra-cflags="-I/usr/local/include" \
    	--extra-ldflags="-L/usr/local/lib" \
    	--disable-iconv \
    	--disable-doc \
    	--disable-debug \
    	--disable-avdevice \
    	--disable-indevs \
    	--disable-outdevs \
    	--disable-postproc \
    	--disable-ffplay \
    	--disable-ffprobe \
    	--disable-encoders \
    	--disable-decoders \
    	--enable-small \
    	--enable-shared \
    	--enable-ffmpeg \
    	--enable-version3 \
    	--enable-nonfree \
    	--enable-w32threads \
    	--enable-avcodec \
    	--enable-avformat \
    	--enable-swresample \
    	--enable-swscale \
    	--enable-avfilter \
    	--enable-gpl \
    	--enable-amf \
    	--enable-nvenc \
    	--enable-x86asm \
    	--enable-libx264 \
    	--enable-encoder=flv \
    	--enable-encoder=h264_nvenc \
    	--enable-encoder=h264_amf \
    	--enable-encoder=hevc_nvenc \
    	--enable-encoder=hevc_amf \
    	--enable-encoder=libx264 \
    	--enable-encoder=pcm_s16le \
    	--enable-encoder=pcm_s24le \
    	--enable-encoder=aac \
    	--enable-encoder=ac3 \
    	--enable-encoder=dca \
    	--enable-encoder=opus \
    	--enable-encoder=vorbis \
    	--enable-encoder=srt \
    	--enable-encoder=ass \
    	--enable-encoder=subrip \
    	--enable-encoder=mjpeg \
    	--enable-encoder=gif \
    	--enable-decoder=mpeg4 \
    	--enable-decoder=flv \
    	--enable-decoder=h264 \
    	--enable-decoder=hevc \
    	--enable-decoder=vp9 \
    	--enable-decoder=h264_cuvid \
    	--enable-decoder=hevc_cuvid \
    	--enable-decoder=vp9_cuvid \
    	--enable-decoder=opus \
    	--enable-decoder=vorbis \
    	--enable-decoder=aac \
    	--enable-decoder=ac3 \
    	--enable-decoder=eac3 \
    	--enable-decoder=srt \
    	--enable-decoder=ass \
    	--enable-decoder=subrip \
    	--enable-decoder=pcm_s16le \
    	--enable-decoder=pcm_s24le \
    	--enable-decoder=dca \
    	--enable-decoder=mp3 \
    	--enable-decoder=flac \
    	--enable-decoder=ape \
    	--enable-decoder=mjpeg
    	
    	make clean
    	make -j4
    	make install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    打开msys2/mingw64.exe,输入以下指令编译ffmpeg

    
    	cd /home/ffmpeg-4.3.5
    	./build.sh 64
    
    
    • 1
    • 2
    • 3
    • 4

    打开msys2/home/ffmpeg-4.3.5/bin-64/bin目录,可以看到编译成功的dll和lib文件

  • 相关阅读:
    机器人代码生成器之Robcogen使用教程
    iphone14来了,可是约好的你去哪了
    NeRF项目LLFF 解决新场景pose生成的问题
    指针笔试题
    地方院校C语言程序设计课程建设与实践
    流程管理与商务智能解决方案(62页PPT)
    NLP相关
    Linux操作文件命令
    OpenCV之VideoCapture
    二分查找及例题
  • 原文地址:https://blog.csdn.net/u013718730/article/details/127787752