环境:win10
准备
1、官网下载安装软件vs2022,msys2,如果无法访问msys2网址,可以从这里下载,安装步骤不再赘述
2、下载ffmpeg源码,我用的是ffmpeg6.0版本
下面开始编译
1、首先,进入MSYS2的安装目录,在该目录下打开 msys2_shell.cmd 文件,将该文件第 17 行代码的注释打开,即去掉 rem 关键字,其他行不变,如下所示:
@echo off
setlocal EnableDelayedExpansion
set "WD=%__CD__%"
if NOT EXIST "%WD%msys-2.0.dll" set "WD=%~dp0usr\bin\"
set "LOGINSHELL=bash"
set /a msys2_shiftCounter=0
rem To activate windows native symlinks uncomment next line
rem set MSYS=winsymlinks:nativestrict
rem Set debugging program for errors
rem set MSYS=error_start:%WD%../../mingw64/bin/qtcreator.exe^|-debug^|^<process-id^>
rem To export full current PATH from environment into MSYS2 use '-use-full-path' parameter
rem or uncomment next line
set MSYS2_PATH_TYPE=inherit
***
***
之所以要打开该注释,是为了让MSYS2可以继承Windows控制台的环境变量。
2、点击windows开始按钮,输入x64 Native Tools 搜索,点击x64 Native Tools Command Prompt for VS 2022打开命令行窗口
3、接下来修改msys2安装包源,打开目录msys64\etc\pacman.d,
mirrorlist.msys 文件开头增加
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
mirrorlist.mingw64 文件开头增加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
mirrorlist.mingw32 文件开头增加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
3、在此窗口命令行下进去msys2目录,启动msys2
# 进入到msys2安装目录
cd D:\MSYS64
# 启动msys2命令行窗口
msys2_shell.cmd
启动后如下所示,接下来的步骤均在msys2命令行窗口执行
4、安装必要的编译工具
pacman -S diffutils make pkg-config yasm
5、之后进入ffmpeg源码目录,执行configure脚本
./configure --prefix=../build --enable-gpl --enable-nonfree --enable-shared --disable-ffprobe --toolchain=msvc
- prefix表示编译生成目录,这里用的相对地址
- 编译使用msvc编译工具,编译时不生成 ffprobe和ffplay程序
6、执行完上述命令会生成makefile文件,接下来执行如下命令:
make -j4 && make install
- 编译过程可能会出现如下错误
...... error C2065: “slib”: 未声明的标识符
...... error C2296: “%”: 非法,左操作数包含“char [138]”类型
这是因为在Windows下无法识别 CC_IDENT,注释掉ffmpeg-6.0\fftools\opt_common.c第206行,如下所示
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);
}
保存文件再此编译即可
7、等待编译完成,查看build/bin目录:
perfect!!!