当前位置: 首页 > web >正文

windows ffmpeg msvc x64编译

windows ffmpeg msvc x64编译

libx265 libx264编译参考文档: 在windows下使用MSVC编译ffmpeg


  1. 安装msys2:类似unix环境,用来编译

    1. 通过vs命令行进入,选择x64 Native Tools Command Prompt for VS 2022

    2. 进入到安装好的msys2文件夹,找到一个msys2_shell.cmd的文件

    3. 修改C:\msys64\msys2_shell.cmd文件,将 rem set MSYS2_PATH_TYPE=inherit 修改成 set MSYS2_PATH_TYPE=inherit (rem 是注释命令,取消是为了 让 MSYS2 环境兼容 Windows 原生工具),增加如下变量:set MSYS2_ARG_CONV_EXCL=*,以防止标志服因为风格问题被篡改

    4. 进入到msys2的环境:

      以默认终端,不打开新的新的命令行窗口(就是msys2提供的终端),然后继承当前环境的系统变量进入到当前目录,在mingw64的环境里

      msys2_shell.cmd -defterm -full-path -no-start -here -mingw64

    5. 输入cl验证环境是否生效

    6. msys2link优先级降低,mv usr/bin/link.exe usr/bin/link.exe.bak

    7. 安装一些环境

      pacman -Syu
      pacman -R mingw-w64-x86_64-pkgconf 
      pacman -S mingw-w64-x86_64-pkg-config
      pacman -S pkg-config
      pacman -S diffutils
      pacman -S make
      
  2. 安装yasm nasm:用于优化的编码器 解码器

    FFmpeg 中的许多编解码器(如 H.264、H.265、VP9 等)包含高度优化的汇编代码,这些代码需要 Yasm 或 NASM 进行编译

    • NASM:Windows 平台必备,用于编译 x86/x64 架构的优化代码

      下载方式:

      1. 官网,类似如下路径:[Index of /pub/nasm/releasebuilds/2.16.03/win64](https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/)
      2. 安装后解压,解压路径加入环境变量
      3. nasm -v验证是否安装成功
    • Yasm:Linux/macOS 平台常用,但在 Windows 上也需要用于某些特定优化

      下载方式:

      1. 官方下载:[yasm.tortall.net](https://yasm.tortall.net/)
      2. 官网无法访问,可以github下载:https://github.com/yasm/yasm/releases/tag/v1.3.0
      3. .exe文件改名为yasm.exe
      4. 将下载路径加入环境变量
      5. 验证:yasm --version
  3. 编译x264

    1. 源码:git clone https://code.videolan.org/videolan/x264.git

    2. 编译:

      1. 构建:执行以下脚本:最重要的是 CC=cl 因为x264的编译,选项没有提供CC的选项, CC=cl可以写入./configure, 头一次编译没生效,不确定是这里还是link问题

        BUILD_DIR="/home/X264msvc64"
        CC=cl 
        ./configure  --prefix=$BUILD_DIR/ --enable-static --enable-shared --enable-pic  --disable-opencl --disable-cli
        
      2. 编译:make&&make install

      3. 修改pc文件:链接库选择动态库导出库

        prefix=/mingw64
        exec_prefix=${prefix}
        libdir=${exec_prefix}/lib/x264
        includedir=${prefix}/include/x264Name: x264
        Description: H.264 encoder library
        Version: 0.165.3215M
        Libs: /LIBPATH:${libdir}  libx264.dll.lib
        Libs.private: 
        Cflags: /I${includedir} -DX264_API_IMPORTS
        
  4. 编译x265

    1. 源码:git clone https://bitbucket.org/multicoreware/x265_git.git

    2. 编译:

      1. x265是个cmake工程,已经提供了各种环境变异的脚本,进入到x265_git\build\msys-cl\,选择64bit版本,64bit会对which cl值和target_processor,确认是64可以将这段注释掉

      2. 对脚本进行部分修改,添加INSTALL_DIR

        #!/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 shelltarget_processor='amd64'
        path=$(which cl)
        INSTALL_DIR="/home/25094/x265Msvc64"if cl; thenecho
        elseecho "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
        #ficmake -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 ]
        thennmake
        fi
        
      3. ./make-Makefiles-64bit.sh

      4. 修改pc文件:链接库选择动态库导出库

        prefix=/mingw64
        exec_prefix=${prefix}
        libdir=${exec_prefix}/lib/x265
        includedir=${prefix}/include/x265Name: x265
        Description: H.265/HEVC video encoder
        Version: 4.1
        Libs: /LIBPATH:${libdir} libx265.lib
        Libs.private: 
        Cflags: /I${includedir}
  5. sdl编译,主要选2,不要选3

    1. 下载:Releases · libsdl-org/SDL

    2. 三方库配置

      1. include: mkdir -p /mingw64/include/SDL2; cp -r include /mingw64/include/SDL2/

      2. lib: mkdir -p /mingw64/lib/SDL2; cp -r lib/x64/* /mingw64/lib/SDL2/

      3. pc: touch /mingw64/lib/pkgconfig/SDL2.pc

        内容如下:

        prefix=/mingw64
        exec_prefix=${prefix}
        libdir=${exec_prefix}/lib/SDL2
        includedir=${prefix}/include/SDL2Name: SDL2
        Description: SDL2 Description
        Version: 2.26.5
        Libs: -L${libdir} -lSDL2 -lSDL2main 
        Libs.private: 
        Cflags: -I${includedir}
        
  6. ffmpeg编译

    1. cd到ffmpeg源码,开始构建,执行如下脚本

      echo $PKG_CONFIG_PATH;
      pkg-config --cflags  --libs SDL2;
      #X264_INSTALL=D:/MSYS2/home/25094/new-X264msvc64;X264_LIB=$X264_INSTALL/lib;
      #X265_INSTALL=D:/MSYS2/home/25094/new-X265msvc64;X265_LIB=$X265_INSTALL/lib;
      #export PKG_CONFIG_PATH=$X264_LIB/pkgconfig:$X265_LIB/pkgconfig:$PKG_CONFIG_PATH
      pkg-config --cflags  --libs x264;
      pkg-config --cflags --libs  x265;#export CFLAGS="$CFLAGS -I/mingw64/include/x264 -I/mingw64/include/x265"
      #export LDFLAGS="$LDFLAGS -L/mingw64/lib/x264 -L/mingw64/lib/x265 -lx264 -lx265  -lstdc++"
      #export CFLAGS="$CFLAGS /ID:/MSYS2/mingw64/include/x264 /ID:/MSYS2/mingw64/include/x265"
      #export LDFLAGS="$LDFLAGS /LIBPATH:D:/MSYS2/mingw64/lib/x264 /LIBPATH:D:/MSYS2/mingw64/lib/x265 x264.lib x265.lib"#export CFLAGS="$CFLAGS -I/mingw64/include"  # x265 头文件通常直接在 include/ 下
      #export LDFLAGS="$LDFLAGS -L/mingw64/lib -lx265 -lstdc++"  # x265 需要额外链接 libstdc++
      BUILD_DIR="/home/25094/ffmpeg60_build"; 
      ./configure \--target-os=win64 \--toolchain=msvc \--cc=cl \--cxx=cl \--arch=x86_64 \--enable-shared \--enable-libx264 \--enable-libx265 \--enable-gpl \--enable-nonfree \--prefix="$BUILD_DIR" #--pkg-config="/d/MSYS2/home/25094/ffmpeg-6.1.2/pkg-config"#--extra-cflags="/ID:/MSYS2/mingw64/include/x264 /ID:/MSYS2/mingw64/include/x265" \--extra-ldflags="/LIBPATH:D:/MSYS2/mingw64/lib/x264 /LIBPATH:D:/MSYS2/mingw64/lib/x265 x264.lib x265.lib  libcmt.lib" \
      
    2. faq

      1. 出现错误可以查看ffbuild/config.log
      2. 一定要设置MSYS2_ARG_CONV_EXCL,否则路径风格 前缀转换会把/开头字符搞混乱
      3. x264 x265静态库用来连接会出问题,选择动态库导出表来连接
      4. 如果x264 x265的pc文件没有放入标准路径,需要修改PKG_CONFIG_PATH环境变量,将x264 x265的pc文件加入
    3. 编译:

      1. 修改config.h: 将第9行CC_IDENT那的中文删除
      2. make -j4&& make install
http://www.xdnf.cn/news/6573.html

相关文章:

  • keil uniFlash烧录出现八字节对齐错误
  • 并发编程(二)
  • ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例
  • 语音识别——声纹识别
  • bfs搜索加标记连通区域id实现时间优化(空间换时间)
  • C++文件操作--1 文本文件操作
  • MYSQL之基本查询(CURD)
  • 基于javaweb的JSP+Servlet家政服务系统设计与实现(源码+文档+部署讲解)
  • c++,windows,多线程编程详细介绍
  • 机器视觉对位手机中框点胶的应用
  • Oracle统计信息收集时的锁持有阶段
  • 全面指南:Xinference大模型推理框架的部署与使用
  • 平替BioLegend品牌-FITC 标记 CD11c 抗体 [N418],精准识别小鼠树突细胞
  • [Harmony]大文件持久化
  • Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler
  • Pangle出海指南:如何实现ROI最大化?
  • Spring Boot多数据源配置的陷阱与终极解决方案
  • 在 Vue 中使用 Three.js 渲染 GLB 格式模型
  • antd 主题色定制
  • C++(12):using声明
  • 智能包装机控制终端技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的全场景国产化替代解析
  • Console Importer浏览器插件的编译 及 制作成.crx浏览器插件的步骤
  • electron进程通信
  • 128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域
  • 关于xammp数据库打开不了,但是日志没错误的问题解决以及其数据库的备份
  • 如何利用 Python 爬虫按关键字搜索京东商品:实战指南
  • Docker 安装 MySQL8
  • OpenCV 图像直方图:从原理剖析到实战应用
  • linux系统服务
  • Qt信号槽机制与UI设计完全指南:从基础原理到实战应用