Windows下如何编译FFmpeg

这篇具有很好参考价值的文章主要介绍了Windows下如何编译FFmpeg。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  ffmpeg一般在linux环境中使用,但是我们目前很多的开发工具是windows,为了方便在windows下调试和使用ffmpeg,我们需要再windows下面编译和使用ffpeg,本文只讲述windows下如何编译ffmpeg的内容。
  windows下编译ffmpeg有很多的方法,本文主要用MSYS2的方式来编译。其本质就是模拟一个linux的命令环境,用来编译ffmpeg

一、需要的软件下载

  在windows下编译ffmpeg,需要下载几个软件,我们将其下载在一个不带有中文名称的文件夹中。

1、下载MSYS2

官网下载地址:https://www.msys2.org/
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

2、下载FFmpeg源码

从ffmpeg官网上下载的源码好像不是最新的,后面编译的时候会报错,所以我们直接从github上下载5.1.2版本

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

3、下载x264源码

官网下载地址:https://www.videolan.org/developers/x264.html
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

4、下载SDL源码(可选,在编译FFplay.exe时需要)

官网下载地址:https://www.libsdl.org/
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg
这里下载了2.26.3版本
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

将下载的软件解压放在一个没有中文名称和空格的文件夹中,以下是我的地址路径

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

二、安装MSYS2及编译工具链

1、点击msys2-x86_64-20230718.exe并完成安装,完成后的工具如下:

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

2、修改C:\msys64\msys2_shell.cmd文件,将 rem set MSYS2_PATH_TYPE=inherit 修改成 set MSYS2_PATH_TYPE=inherit

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

3、启动MSYS2 MINGW64,依次输入以下命令行开始安装mingw64编译链和基本依赖

  • 更新环境
pacman -Sy

如果出现 clang32: signature from “Christoph Reiter (MSYS2 development key) reiter.christoph@gmail.com” is invalid
解决方法是输入以下命令,

 rm -r /etc/pacman.d/gnupg/
 pacman-key --init
 pacman-key --populate msys2
 curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
 curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
 pacman -U --config <(echo) msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
 pacman -Syu

最终结果:
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

  • 安装基本依赖库
pacman -S mingw-w64-x86_64-toolchain  # mingw64编译工具链,win下的gcc,用于编译64位的库
pacman -S mingw-w64-i686-toolchain # 用于编译32位的库
pacman -S base-devel    # 一些基本的编译工具
pacman -S yasm nasm  gcc   # 汇编器
pacman -S mingw64/mingw-w64-x86_64-SDL2  #SDL2 是ffmpeg依赖的,因为没有它ffpaly不能用

安装完毕后,可以输入gcc -v查看 gcc 版本:
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

3、添加环境变量

最后需要添加环境变量。右击此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 选择 Path (用户变量和系统变量都要)-> 编辑 -> 新建,添加编译工具链的路径:
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg
注意如果 MSYS2 没有安装在 C 盘,或者使用的不是 MINGW64 的shell,那么这里需要改成对应的路径。添加环境变量这一步,是为了以后使用其他编辑器或者IDE时,能够找到 MINGW64 的编译工具链。在 MSYS2 中编译 ffmpeg 本身是不需要添加 Windows 的环境变量的。

三、编译和安装

1、新建FFmpeg-n5.1.2-install和x264-install两个文件夹,用来存放编译后安装的文件

2、打开SDL源码中的sdl2-config文件

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg
修改其中的prefix路径,具体路径根据你文件所在位置确定,不能直接复制文件资源管理器中的路径,需要修改为以下格式

prefix=/d/worksoft/audioAndVideo/SDL2-2.26.3/x86_64-w64-mingw32

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

3、打开FFmpeg源码目录中的configure文件

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

修改SDL2_CONFIG路径,规则同上

SDL2_CONFIG="/d/worksoft/audioAndVideo/SDL2-2.26.3/x86_64-w64-mingw32/bin/sdl2-config"

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

4、编译x264

在放置文件的目录下新建build_x264.sh文件,内容如下:

#!/bin/sh
#进入执行脚本所在目录
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
 
#进入h264源码目录
cd ${basepath}/x264-master   # 根据路径名称自行修改
pwd
#配置编译参数
./configure --prefix=${basepath}/x264-install --enable-shared
#开始8线程编译
make -j8
#将编译后的文件拷贝到--prefix参数配置目录
make install

在MSYS2 MINGW64中执行如下命令,等待x264编译完成

cd /d/worksoft/audioAndVideo
./build_x264.sh

编译完成后,在x264-install目录下就可以看到编译后的文件
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

5、编译ffmpeg

在在放置文件的目录下新建build_ffmpeg.sh文件,内容如下:

#!/bin/sh
#进入执行脚本所在目录
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}

#进入ffmpeg源码目录
cd ${basepath}/FFmpeg-n5.1.2  # 根据路径名称自行修改
pwd
#指定PKG_CONFIG_PATH变量,告知编译器x264库的路径
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${basepath}/x264-install/lib/pkgconfig
echo ${PKG_CONFIG_PATH}
#配置编译参数
./configure --prefix=${basepath}/FFmpeg-n5.1.2-install \
--enable-gpl \
--enable-debug \
--enable-libx264 \
--disable-static \
--enable-shared \
--enable-sdl2 \
--enable-ffplay \
--enable-ffprobe \
--enable-ffmpeg \
--disable-vulkan \
--disable-doc  \
--disable-htmlpages  \
--disable-manpages  \
--disable-podpages  \
--disable-txtpages \
--extra-cflags=-l${basepath}/x264-install/include \
--extra-ldflags=-L${basepath}/x264-install/lib
 
 
#开始8线程编译
make -j8
#将编译后的文件拷贝到--prefix参数配置目录
make install

在MSYS2 MINGW64中执行如下命令,等待编译完成

./build_ffmpeg.sh
  • 如果出现如下错误:
    Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg
    解决方案:
    修改FFmpeg-n5.1.2\libavcodec\x86\mathops.h文件的三个函数,修改对应的函数的内容如下:
#define MULL MULL
static av_always_inline av_const int MULL(int a, int b, unsigned shift)
{
    int rt, dummy;
    if (__builtin_constant_p(shift))
    __asm__ (
        "imull %3               \n\t"
        "shrdl %4, %%edx, %%eax \n\t"
        :"=a"(rt), "=d"(dummy)
        :"a"(a), "rm"(b), "i"(shift & 0x1F)
    );
    else
        __asm__ (
            "imull %3               \n\t"
            "shrdl %4, %%edx, %%eax \n\t"
            :"=a"(rt), "=d"(dummy)
            :"a"(a), "rm"(b), "c"((uint8_t)shift)
        );
    return rt;
}

#define NEG_SSR32 NEG_SSR32
static inline  int32_t NEG_SSR32( int32_t a, int8_t s){
    if (__builtin_constant_p(s))
    __asm__ ("sarl %1, %0\n\t"
         : "+r" (a)
         : "i" (-s & 0x1F)
    );
    else
        __asm__ ("sarl %1, %0\n\t"
               : "+r" (a)
               : "c" ((uint8_t)(-s))
        );
    return a;
}

#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
    if (__builtin_constant_p(s))
    __asm__ ("shrl %1, %0\n\t"
         : "+r" (a)
         : "i" (-s & 0x1F)
    );
    else
        __asm__ ("shrl %1, %0\n\t"
               : "+r" (a)
               : "c" ((uint8_t)(-s))
        );
    return a;
}

然后重新编译
编译完成后的结果如下:
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

6、复制一份x264-install\bin下面的libx264-164.dll到FFmpeg-n5.1.2-install\bin下面,否则打开的时候会报找不到

四、ffmpeg的Hello World程序

在 ffmpeg 安装路径下,打开 share\ffmpeg\examples ,可以看到 ffmpeg 的示例程序,它们也可以在 ffmpeg 的在线 API 文档 中查看到。

其中的 avio_reading.c 相当于 ffmpeg 的 Hello World,它会读取一个媒体文件的元数据信息并打印显示。
另外建一个文件夹test_hello_world,将avio_reading.c复制过去,然后用在 MYSY2 中打开这个目录,使用 gcc 命令编译。
命令如下:

cd /d/worksoft/audioAndVideo/FFmpeg-n5.1.2-install/share/ffmpeg/examples
mkdir test_hello_world
cp avio_reading.c test_hello_world/

cd test_hello_world
gcc avio_reading.c -o test \
-I"D:/worksoft/audioAndVideo/FFmpeg-n5.1.2-install/include/" \
-L"D:/worksoft/audioAndVideo/FFmpeg-n5.1.2-install/bin/" \
-lavcodec -lavformat -lavutil

Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

编译完毕后,将在当前文件夹下生成可执行文件test.exe。
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

在 shell 中运行程序之前,需要将两个库的安装目录添加到环境变量 PATH (这是MSYS2 的环境变量,不是 Windows 系统的)。

export PATH=$PATH:/d/worksoft/audioAndVideo/x264_install/bin:/d/worksoft/audioAndVideo/FFmpeg-n5.1.2-install/bin

如果不执行export命令的话,那么运行test.exe时就无法链接到动态库,更令人困扰的是不会弹出任何提示,所以一定记得添加。当然如果你觉得每次打开都要运行太麻烦,也可以将这条命令添加到 你的安装位置/msys64/etc/profile 文件的末尾,这个文件和 Linux 下的/etc/profile文件作用是类似的。

找一个视频文件,运行测试效果如下:
Windows下如何编译FFmpeg,# FFmpeg,windows,ffmpeg

五、踩过的坑

1、安装MSYS2的时候,如果执行了sed -i “s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g” /etc/pacman.d/mirrorlist*,在执行pacman -Sy时会报错,还了各个ffmpeg版本无法解决

2、从ffmpeg官网下载的文件源码内容和github上的不一样

3、在编译ffmpeg的时候,如果不加

–disable-doc
–disable-htmlpages
–disable-manpages
–disable-podpages
–disable-txtpages
这几个,会在make install的时候报错,导致无法安装完成

后记
  个人总结,欢迎转载、评论、批评指正


参考资料:
Windows下FFmpeg库编译安装指南
ffmpeg库编译安装及入门指南(Windows篇)- 2022年底钜献文章来源地址https://www.toymoban.com/news/detail-719154.html

到了这里,关于Windows下如何编译FFmpeg的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows下msys2编译64位的ffmpeg源码

    目前遇到过两次需求,需要编译ffmpeg源码。网上下载的编译好的源码里面可能不全,很多时候需要自行编译源码。本文介绍自行编译ffmpeg64位源码(32位通过相似的方式为编译成功,不知道原因) 环境: 2023.5.4下载的最新版msys2 ffmpeg 4.3.2源码 windows操作系统 首先需要msys2软件和

    2024年02月03日
    浏览(41)
  • 音视频开发三:Windows环境下FFmpeg编译安装

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的 开源计算机程序 。采用LGPL或GPL许可证 。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环

    2024年02月04日
    浏览(70)
  • ffmpeg windows环境MinGW+msys2编译so库

    一定要把windows路径的\\\"“换成”/\\\" –prefix 配置安装路径参数 配置交叉编译参数 配置不需要生成相关工具 使用\\\"\\\"+enter可以换行输入多行参数

    2024年02月11日
    浏览(42)
  • 2023最新Windows编译ffmpeg详细教程,附msys2详细安装配置教程

    msys2是一款跨平台编译套件,它模拟linux编译环境,支持整合mingw32和mingw64,能很方便的在windows上对一些开源的linux工程进行编译运行。 类似的跨平台编译套件有: msys , cygwin , mingw 优势: 相对于 cygwin 和 msys 等环境,它支持 pacman 包管理器,这意味着你可以很方便的安装所

    2024年02月13日
    浏览(41)
  • windows上ffmpeg如何录制双屏幕中的一个屏幕上的视频

    首先,如何在window上安装ffmpeg自己查找scoop安装ffmpeg. 如题: 如果你有两个屏幕,如何让ffmpeg来录制其中的一个屏幕的视频呢。 很简单,首先你要查看另外一个屏幕的分辨率: 第一步:进入系统中 第二步:进入屏幕 第三步:选择扩展屏幕 第四步:查看分辨率 然后打开powe

    2024年02月11日
    浏览(36)
  • FFmpeg在 Windows 环境编译(64位)支持h264,h265,和Intel QSV,Nvidia Cuda,AMD amf 硬件加速

    目录 目录 前言 一. 源码包下载 1. FFmpeg源码下载 2. MSYS2安装   2.1 执行下面命令配置环境   2.2 安装完成后将MSYS2安装路径下的mingw64/bin配置到windows环境变量中   2.3 安装其他工具( 默认全部安装 ): 3. 安装CMake工具   3.1 将CMake加入环境变量 4. 下载x264,x265   4.1 x264源码下载:

    2024年02月11日
    浏览(59)
  • 如何在Windows使用 ffmpeg 转换整个目录?以MP4转MP3为例

    对于 Windows上键入命令如下: 在这里,我将所有 (.mp4) 文件转换为 (.mp3) 文件。 只需打开 cmd,转到所需的文件夹并键入命令。 快捷方式:(可选) 转到 (.mp4) 文件所在的文件夹 按 Shift 并左键单击并选择“在此处打开 PowerShell 窗口” 或“在此处打开命令提示符窗口” 键入“

    2023年04月08日
    浏览(42)
  • window10_ffmpeg调试环境搭建-自己编译

    《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。 《window10_ffmpeg调试环境搭建-极速版》已经介绍了在qt creator里面 调试ffmpeg.c 工程。但是极速版的dll是现成的。所以本文来讲解如何自己编译出ffmpeg的dll。 window10 环境下 ffmpeg的编

    2023年04月09日
    浏览(91)
  • Windows安装FFmpeg说明

    下载地址 官网 Download FFmpeg Csdn ffmpeg安装包,ffmpeg-2023-08-28-git-b5273c619d-full-build.7z资源-CSDN文库 解压安装,添加环境变量 命令行输入ffmpeg 安装成功

    2024年02月10日
    浏览(35)
  • windows下载安装FFmpeg

    FFmpeg是一款强大的音视频处理软件,下面介绍如何在windows下下载安装FFmpeg 进入官网: https://ffmpeg.org/download.html, 选择Windows, 然后选择\\\"Windows builds from gyan.dev\\\" 在弹出的界面中找到 release builds , 然后选择一个版本,笔者选择的是最新版本, ffmpeg-release-essentials.zip, 点击即可下载 ` 解

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包