Windosw下Visual Studio2022编译FFmpeg(支持x264、x265、fdk-acc)

发布于:2024-07-27 ⋅ 阅读:(35) ⋅ 点赞:(0)

        FFmpeg 7.0 版本移除了 6.0 之前已弃用的 API,无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。

一、安装Visual Studio2022

可参考另外一篇文章:Windows安装Visual Studio2022 + QT5.15开发环境_qt5.15.2 vs2022-CSDN博客

 二、安装MSYS2

下载地址:https://www.msys2.org/

 

百度网盘链接:https://pan.baidu.com/s/1DWarXxYEXn5HsLPc32eY_g?pwd=imcs 
提取码:imcs 

安装完成之后,先把安装⽬录(默认路径 c:\msys64下的msys2_shell.cmd中注释掉的 rem set MSYS2_PATH_TYPE=inherit 改成 set MSYS2_PATH_TYPE=inherit ,这是为了将vs的环境继 承给MSYS2

 添加国内镜像,下载源码用

修改C:\msys64\etc\pacman.d中mirrorlist.msys,在## Primary下面添加清华大学的源镜像

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

三、安装编译环境
 1、右键使用管理员身份打开x64 Native Tools Command Prompt for VS 2022

 

进入msys64的安装目录,执行msys2_shell.cmd -use-full-path

 

这样会打开MSYS2 的终端:  

 

 MSYS2窗口打开后,先把基本的环境安装好

#pacman -Syu 一键安装和升级所有的库
pacman -Syu
#安装编译ffmpeg所需的包
pacman -S gcc
pacman -S make
pacman -S pkg-config
pacman -S diffutils
pacman -S yasm
pacman -S nasm

#避免与msvc的link冲突
mv /usr/bin/link.exe /usr/bin/link.exe.bak
2、安装git:

pacman -S git

3、下载源码
  • x264地址:git clone http://git.videolan.org/git/x264.git 或  git clone https://code.videolan.org/videolan/x264.git
  • x265地址:git clone https://bitbucket.org/multicoreware/x265_git.git
  • fdk-aac地址:git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git

 ffmpeg下载地址往后看(此处可忽略)

新建D:\build文件夹并将源代码复制至此

四、编译依赖库 
1、编译x264 

--enable-shared:编译成动态库(建议)

--enable-static:编译成静态库

D:\build\x264目录下新建build.sh(-j 线程数量,根据自己电脑情况调整)

#!/bin/sh

OPTIONS="--enable-shared"

BUILD_DIR="./../build64"

CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/

make -j16
make install
make clean

在msys2窗口中cd进入x264目录编译

cd /d/build/x264
sh build.sh

编译完后输出如下文件 :

2、编译x265 

D:\build\x265_git\build\msys-cl目录下修改make-Makefiles-64bit.sh

#!/bin/sh
# This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration
# Run this from within an MSYS bash shell

INSTALL_DIR="./../../../build64/"
target_processor='x64'
path=$(which cl)

if cl; then
    echo
else
    echo "please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64'"
    echo "and then launch msys bash shell from there"
    exit 1
fi

if [[ $path  == *$target_processor* ]]; then
    echo
else
    echo "64 bit target not set, please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64 | x86_amd64 | amd64_x86'"
    exit 1
fi

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4"  ../../source
if [ -e Makefile ]
then
    nmake
fi

nmake install

在msys2窗口中cd进入x265_git/build/msys-cl目录编译

cd /d/build/x265_git/build/msys-cl
sh make-Makefiles-64bit.sh

编译完后输出如下文件 :

3、编译fdk-aac

安装cmake-gui,下载地址:

https://cmake.org/download/

点击Finish,然后修改输出目录

用Visual Studio2022(有问题请用管理员权限)打开生成的工程fdk-aac.sln

 

依次编译生成fdk-aac、INSTALL 

编译完成后输出如下: 

 

4、编译SDL2 (ffplay需要,不编译ffplay请跳过)

git clone --depth 1 https://github.com/libsdl-org/SDL.git -b SDL2 

Visual Studio2022(用管理员权限)打开生成的工程SDL2.sln

  依次编译生成SDL2、INSTALL

五、编译FFmpeg 

修改D:\build\build64\lib\pkgconfig内的fdk-aac.pc、x264.pc、x265.pc、sdl2.pc内prefix值

 

进入目录D:\build\build64\lib,将 libx264.dll.lib 重命名为 libx264.lib ,libx265.lib 重命名为 x265.lib 

下载FFmpeg源码

方式一:git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git -b release/6.1

方式二:下载地址:https://ffmpeg.org/download.html#releases 

修改fftools/opt_common.c 源码文件, 注释掉 CC_IDENT 所在行,如下所示: 

static void print_program_info(int flags, int level)
{
    const char *indent = flags & INDENT? "  " : "";

    av_log(NULL, level, "%s version " FFMPEG_VERSION, program_name);
    if (flags & SHOW_COPYRIGHT)
        av_log(NULL, level, " Copyright (c) %d-%d the FFmpeg developers",
               program_birth_year, CONFIG_THIS_YEAR);
    av_log(NULL, level, "\n");
    //av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);

    av_log(NULL, level, "%sconfiguration: " FFMPEG_CONFIGURATION "\n", indent);
}

 修改fftools/ffprobe.c 源码文件, 注释掉 CC_IDENT 所在行,如下所示: 

static void ffprobe_show_program_version(WriterContext *w)
{
    AVBPrint pbuf;
    av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);

    writer_print_section_header(w, NULL, SECTION_ID_PROGRAM_VERSION);
    print_str("version", FFMPEG_VERSION);
    print_fmt("copyright", "Copyright (c) %d-%d the FFmpeg developers",
              program_birth_year, CONFIG_THIS_YEAR);
    //print_str("compiler_ident", CC_IDENT);
    print_str("configuration", FFMPEG_CONFIGURATION);
    writer_print_section_footer(w);

    av_bprint_finalize(&pbuf, NULL);
}

在msys中切换到ffmpeg目录 

cd /d/build/ffmpeg/

配置pkg-config 

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/d/build/buil64d/lib/pkgconfig 

CC=cl ./configure --prefix=/d/build/build64/ffmpeg \
--toolchain=msvc \
--arch=x64 \
--enable-cross-compile \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-shared \
--enable-sdl2 \
--extra-cflags="-I/d/build/build64/include" \
--extra-ldflags="-L/d/build/build64/lib"

编译:make -j16

安装:make install

生成动态库及可执行程序即大功告成。 


网站公告

今日签到

点亮在社区的每一天
去签到