# ffmpeg_note **Repository Path**: HTYYHY/ffmpeg_note ## Basic Information - **Project Name**: ffmpeg_note - **Description**: ffmpeg学习笔记 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-02 - **Last Updated**: 2025-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 选择编译工具 ``` X86 Native Tools ``` ### `msys64`目录 ``` D:\msys64 ``` `X86 Native Tools`运行 ``` msys2_shell.cmd -mingw32 ``` 通过`vscode`打开文件 ``` D:\lesson\msys64\msys2_shell.cmd ``` 去掉rem,设置 ``` set MSYS2_PATH_TYPE=inherit ``` 这一行设置打开,确保`MSYS`能继承外部的环境变量 继续运行命令 ``` msys2_shell.cmd -mingw32 ``` 然后在打开的窗口里运行 ``` cl ``` 成功! 设定-解决乱码问题 ``` Options Text zh_CN GBK ``` ![msys2_cl](.\image\msys2_cl.png) ### 配置镜像源 ``` D:\msys64\etc\pacman.d ``` ### `msys2`工具下载官网 https://www.msys2.org/ 环境搭建参考 https://blog.csdn.net/ScienceRui/article/details/117392080 ### `msys2`依赖环境安装 安装的汇编工具,编译x264和ffmpeg用到 pacman ``` pacman -S nasm pacman -S yasm pacman -S make #项目编译工具 pacman -S diffutils #比较工具,ffmpeg configure生成makefile用到 pacman -S pkg-config #库配置工具,编译支持x264和x265 pacman -S git #从版本库下载源码用到 ``` ### 编译x264 ``` 用于h264 AVC 视频格式编码 CC=cl ./configure --enable-shared make -j32 make install ``` 因为`msys2`无法访问C盘,所以把全部源码放到home下面 ``` D:\msys64\home ``` 进入`x264`目录 ``` D:\msys64\home\x264 ``` 1指定编译工具,编译成动态链接库`dll`文件 `msys2`控制台输入 ``` CC=cl ./configure --enable-shared ``` 2接着继续使用make进行编译 ``` make -j32 ``` -j表示指定32个任务进行编译, 目录 ``` C:\msys64\home\x264 ``` 编译完成后,可见生成了几个静态库 ![dll](.\image\dll.png) 3 `msys2`控制台输入 ``` make install ``` 观察编译结果 ``` D:\msys64\usr\local\bin ``` 目录下面存在编译产物 ``` x264.exe ``` 目录 ``` D:\msys64\usr\local\include ``` 下面存在对应的头文件 ``` x264.h x264_config.h ``` 目录 ``` D:\msys64\usr\local\lib\pkgconfig ``` 下面存在文件 ``` x264.pc ``` 最重要的文件`x264.pc` ``` prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: x264 Description: H.264 (MPEG4 AVC) encoder library Version: 0.159.2991 Libs: -L${exec_prefix}/lib -lx264 Libs.private: Cflags: -I${prefix}/include -DX264_API_IMPORTS ``` ``` Libs: -L${exec_prefix}/lib -lx264 ``` 指定了`x264`库在哪个路径下 ``` Cflags: -I${prefix}/include -DX264_API_IMPORTS ``` 指定用了哪些参数 ### 编译x265 ``` 进入目录 x265\build\msys-cl make-Makefiles.sh nmake install prefix=\usr\local ``` 进入`x265`目录 ``` cd /home/x265 ``` 进入目录 ``` cd build/msys-cl ``` 不要调用当前路径下的`cmake` ``` where cmake ``` 如果看到目录`/usr/bin`下有`cmake`,给`cmake`改名 ``` mv cmake.exe cmake1.exe ``` ``` cd /home/x265/build/msys-cl ``` 控制台输入 ``` make-Makefiles.sh nmake install ``` 解决报错 ``` nmake install Microsoft (R) 程序维护实用工具 14.44.35211.0 版 版权所有 (C) Microsoft Corporation。 保留所有权利。 [ 20%] Built target encoder [ 82%] Built target common [ 84%] Built target x265-static [ 86%] Built target x265-shared [100%] Built target cli Install the project... -- Install configuration: "Release" CMake Error at cmake_install.cmake:36 (file): file cannot create directory: C:/Program Files (x86)/x265/lib. Maybe need administrative privileges. NMAKE : fatal error U1077: “D:\lesson\cmake\cmake-3.12.3-win64-x64\bin\cmake.exe -P cmake_install.cmake”: 返回代码“0x1” Stop. ``` 主动在`C:\Program Files (x86)`下创建`x265` 右键点击该目录 → 属性 → 安全 → 编辑 → 添加你的用户并给予完全控制权限 控制台重新输入命令 ``` nmake install ``` ``` C:\Program Files (x86)\x265 ``` 额,然后把生成的三个目录,复制粘贴到 ``` D:\msys64\usr\local ``` 此时可以看到目录下 ``` D:\msys64\usr\local\bin ``` 存在4个文件 ``` libx264-159.dll libx265.dll x264.exe x265.exe ``` ![x265exe](.\image\x265exe.png) 修改文件 `D:\msys64\usr\local\lib\pkgconfig\x265.pc` ``` prefix=C:/Program Files (x86)/x265 exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: x265 Description: H.265/HEVC video encoder Version: 0.0 Libs: -L${libdir} -lx265 Libs.private: Cflags: -I${includedir} ``` 修改prefix ``` prefix=/usr/local ``` ### 编译`fdk-aac` ``` AAC格式音频编码 nmake -f Makefile.vc nmake -f Makefile.vc prefix=.\install install ``` 目录 ``` D:\msys64\home\fdk-aac ``` 因为目录中包含了 ``` Makefile.am Makefile.vc ``` 所以这里不用`msys`进行编译,换成 ``` x86 Native Tools ``` 运行命令 ``` nmake -f Makefile.vc nmake -f Makefile.vc prefix=.\install install ``` 看到目录 ``` D:\msys64\home\fdk-aac\install ``` 再把生成的三个目录复制到 ``` D:\msys64\usr\local ``` 找到文件 ``` D:\msys64\home\fdk-aac\fdk-aac.pc.in ``` 移动,改名 ``` D:\msys64\usr\local\lib\pkgconfig\fdk-aac.pc ``` `fdk-aac.pc` ``` prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: Fraunhofer FDK AAC Codec Library Description: AAC codec library Version: Libs: -L${libdir} -lfdk-aac Libs.private: Cflags: -I${includedir} ``` ### 编译`ffmpeg` ``` CC=cl.exe ./configure --prefix=./install --toolchain=msvc --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265 ● --prefix=./install --toolchain=msvc #指定安装路径和工具链vs ● --enable-shared #编译为动态链接库 ● --disable不编译工具,加快编译速度 ● --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe ● --enable-libx264 --enable-libx265 #支持x264和x265 ● --enable-gpl #支持x264协议,x264和x265必备 ● --enable-libfdk-aac --enable-nonfree #aac音频编码aac必须包含-enable-nonfree ``` #### 错误1 ``` ERROR: libfdk_aac not found ``` 报错查日志 `D:\msys64\home\ffmpeg-4.3\ffbuild\config.log` ``` ./ffconf.KE0tv0ii/test.c(1): fatal error C1083: 无法打开包括文件: “fdk-aac/aacenc_lib.h”: No such file or directory ERROR: libfdk_aac not found ``` 移动目录 源路径 ``` D:\msys64\usr\local\lib\pkgconfig ``` 新路径 ``` D:\msys64\mingw32\lib\pkgconfig ``` 因为一开始指定了启动`-mingw32` 所以会默认在这个路径下找lib库文件 #### 错误2 ``` ERROR: libx264 not found ``` `D:\msys64\home\ffmpeg-4.3\ffbuild\config.log` ``` D:/msys64/usr/local/include\x264.h(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 ./compat/windows/mslink -nologo -LARGEADDRESSAWARE -out:./ffconf.w5NjKLLU/test.exe ./ffconf.w5NjKLLU/test.o libx264.lib LINK : fatal error LNK1181: 无法打开输入文件“libx264.lib” ERROR: libx264 not found ``` 找到文件 ``` D:\msys64\usr\local\lib\libx264.dll.lib ``` 改成 ``` D:\msys64\usr\local\lib\libx264.lib ``` #### 错误3 ``` ERROR: x265 not found using pkg-config ``` `D:\msys64\home\ffmpeg-4.3\ffbuild\config.log` ``` ./compat/windows/mslink -nologo -LARGEADDRESSAWARE -I/usr/local/include -libpath:/usr/local/lib -out:./ffconf.re7GpvOK/test.exe ./ffconf.re7GpvOK/test.o x265.lib LINK : warning LNK4044: 无法识别的选项“/ID:/msys64/usr/local/include”;已忽略 LINK : fatal error LNK1181: 无法打开输入文件“x265.lib” ERROR: x265 not found using pkg-config ``` 找到文件 ``` D:\msys64\usr\local\lib\libx265.lib ``` 改成 ``` D:\msys64\usr\local\lib\x265.lib ``` 正式编译 ``` make -j32 ``` 最后一个命令 ``` make install ``` 查看编译结果 ``` D:\msys64\home\ffmpeg-4.3\install\bin ```