windows下编译ffmpeg4.1 ffmpeg 3.3版本,生成ffplay

背景:初学ffmpeg,在windows上编译调试时遇到了很多问题,网上大多教程使用的是MinGW+msys1.0,虽然MinGW最新版本已经集成了msys,但是却无法正常安装,需要翻墙,比较麻烦,且大多数都比较老旧存在许多问题,本文介绍流程环境搭建简单,按照此流程,我测试了ffmpeg4.1.3和ffmpeg3.3.9版本均能正常编译,由于ffmpeg2.X版本使用SDL1.0,所以没有尝试,感兴趣且有需求的可以试一下

工具:msys2+mingw64


编译环境搭建

    1、msys2安装 

         在清华大学镜像网站下载并安装 msys2 最新版本 ,64位系统建议下载x86_64版本,安装一路点击下一步就行

    2、msys2配置

        将默认源地址替换为清华大学镜像地址,类似于Ubuntu设置镜像源,这样安装其他工具速度会快很多,配置步骤如下

        见清华大学镜像网站msys2帮助文档

  pacman配置

    Pacman 是一个软件包管理器,类似ubuntu的apt-get,可以很方便的安装管理linux软件和工具。

    先进入到msys2安装路径下,然后执行如下操作

    编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:  

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

   编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

   编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

  配置完执行 pacman -Sy 刷新软件包数据即可。

       然后执行安装路径下msys2_shell.cmd打开msys终端,执行"pacman -Syuu"命令,中途可能会提示关闭终端,此时关闭msys,重新         打   开,再次执行"pacman -Syuu"命令,更新软件包

    这里顺便附一个pacman包管理工具命令

    3、安装MinGW

       在刚才打开msys终端执行 "pacman -S --needed base-devel mingw-w64-x86_64-toolchain ",安装时选择默认配置,

pacman -S --needed base-devel mingw-w64-x86_64-toolchain 

       将E:\ffmpeg\msys2\mingw64\bin(依安装路径来定)加入系统变量path中,不会的自行百度,或者在msys终端输入echo $HOME,找到home路径,从而找到终端启动脚本".bashrc",将export PATH="/mingw64/bin:$PATH"加到/home/Dawn/.bashrc文件末尾,关闭终端。建议使用第二种方法配置,可以解决电脑装有多个mingw,相互隔离

$ echo $HOME
/home/Dawn

打开msys2安装路径下mingw64.exe,输入gcc -v ,能看到gcc版本说明设置成功,后续操作都在mingw64终端中进行

    4、安装SDL2

    下载路径Simple DirectMedia Layer - SDL version 2.0.20 (stable) ,建议下载源码编译,避免使用dev版本configura时遇到各样问题

    下载并解压后,在msys64终端cd到SDL解压路径,进行config并编译安装

mkdir /usr/local/SDL2/
./configure --prefix=/usr/local/SDL2/
make && make install

    5、安装yasm

     下载路径Download - The Yasm Modular Assembler Project,打不开尝试多刷新几次,根据自己电脑下载合适版本,我这里下载的是64位版本,将下载好的yasm-1.3.0-win64.exe 或者 yasm-1.3.0-win32.exe 修改为 yasm.exe并拷贝到c:\windows路径下,这一步实际就是加到系统变量中

编译ffmpeg并生成ffplay

    ffmpeg可以到ffmpeg官网,或者github下载,看到这的估计都已经有ffmpeg源码了,这里就不介绍了,下面直接开始编译,首先cd到ffmpeg源码目录

将usr/local/SDL2/bin添加到系统path变量中,方法同环境搭建中的第三步添加环境变量方法,或直接直接在mingw64终端export PATH="/usr/local/SDL2/bin/:$PATH",此处建议添加到终端启动脚本.bashrc中

PATH="/usr/local/SDL2/bin/:$PATH"

执行以下脚本

./configure \
    --enable-shared \
    --disable-static \
    --enable-debug \
    --enable-sdl2 \
    --enable-gpl \
    --extra-cflags='-I/usr/local/SDL2/include/SDL2/ ' \
    --extra-ldflags='-L/usr/local/SDL2/lib' \
    --prefix=/usr/local/ffmpeg4.1
make
make isntall

生成ffplay需要--enable-sdl2  和 --enable-gpl ,--extra-cflags 添加头文件查找路径,--extra-ldflags添加库文件查找路径,上述两个选项添加多个路径时用空格隔开,--prefix 指定安装路径,指定路径需提前创建,make开始编译,电脑配置高可以使用make -j4,启用4个线程编译,提升编译速度,编译线程过多会造成电脑卡顿,根据电脑配置合理使用,更多编译选项见FFmpeg编译选项详解_Dream_yz的博客-CSDN博客_ffmpeg编译选项

接下来便是耐心等待

添加x264,libmp3lame编码器支持

1、添加x264

    下载x264 最新源码http://download.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2,解压并cd到x264解压路径,配置并编译

2022/4/5 发现之前下载地址无法使用可以使用github链接下载

git clone https://github.com/mirror/x264.git

mkdir /usr/local/x264
./configure --enable-static -–prefix=/usr/local/x264
make && make install

编译ffmpeg

./configure \
    --enable-shared \
    --disable-static \
    --enable-debug \
    --enable-sdl2 \
    --enable-gpl \
    --enable-libx264 \
    --extra-cflags='-I/usr/local/SDL2/include/SDL2/ -I/usr/local/x264/include' \
    --extra-ldflags='-L/usr/local/SDL2/lib -L/usr/local/x264/lib' \
    --pkgconfigdir='/usr/local/x264/lib/pkgconfig/' \
    --prefix=/e/ffmpegExport/ffmpeg4.1
make
make install

2、添加libmp3lame

   下载路径https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/sources/mingw-w64-x86_64-lame-3.99.5-4.src.tar.gz,cd到解压路径

./configure --disable-shared --enable-static --prefix=/usr/local/lame-3.99.5
make 
make install

编译过程中遇到找不到如下所示头文件,搜索后发现mingw64\include\pdcurses下有这个头文件,本来这个是编译器默认查找路径,但是不知为啥没找到,暂时没有找到比较好的办法,只能将这些路径加到编译器查找头文件路径内,添加后编译成功

export C_INCLUDE_PATH=/mingw64/include/:$C_INCLUDE_PATH
export C_INCLUDE_PATH=/mingw64/include/pdcurses:$C_INCLUDE_PATH

编译ffmpeg

./configure \
    --enable-shared \
    --disable-static \
    --enable-debug \
    --enable-sdl2 \
    --enable-gpl \
    --enable-libx264 \
    --enable-libmp3lame \
    --extra-cflags='-I/usr/local/SDL2/include/SDL2/ -I/usr/local/x264/include -I/usr/local/lame-3.99.5/include' \
    --extra-ldflags='-L/usr/local/SDL2/lib -L/usr/local/x264/lib -L/usr/local/lame-3.99.5/lib' \
    --pkgconfigdir='/usr/local/x264/lib/pkgconfig/' \
    --prefix=/e/ffmpegExport/ffmpeg4.1
make
make install

问题总结

1、编译过程中出现SDL2相关错误,可能是PATH="/usr/local/SDL2/bin/:$PATH"未执行(未放入环境变量中,编译时找不到)

2、编译时找不到头文件,搜索到头文件路径,将其添加到gcc默认查找头文件路径环境变量$C_INCLUDE_PATH内,搜索推荐一个非常好用的工具everything,它会将所有文件形成一个索引,查找文件时十分快

3、后续发现msys2源内含有SDL,lame,ffmpeg等源码,可以直接用pacman -S package-name 命令安装

4、安装SDL,x264,lame时不指定安装目录的话,编译ffmpeg时不需要添加头文件可库文件的查找路径,因为默认安装路径在gcc查找范围内

5、运行编译好的ffmpeg.exe ffplay.exe ...时提示找不到某些dll库时,在msys安装路径下搜索相关库,然后复制到ff***.exe所在路径下,注意不要直接拖拽,若两个路径在同一个磁盘会直接剪切过去,影响后续编译。

参考链接

Windows下编译可调试的ffmpeg, 包含ffplay_shizheng163的博客-CSDN博客_ffmpeg 编译ffplay

【FFmpeg】Windows下编译ffmpeg,链接libx264静态库_操吴戈兮被犀甲的博客-CSDN博客_windows编译ffmpeg静态库

Linux下ffmpeg的完整安装 - wanghetao - 博客园

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值