ffmpeg5.0+h264+h265 windows下编译方法-程序员宅基地

技术标签: ffmpeg  windows  x265  x264  

目录

前言

一,源码包下载

1.ffmpeg下载

2.下载x264代码

3.下载x265代码

二,MSYS2安装

三,安装cmake工具

四,代码编译

1.编译x264

2.编译x265

3.编译ffmpeg

五,功能验证

1.x264验证

2.x265验证

3.ffmpeg验证

六,其它

1.关于Cannot load library avcodec-59.dll问题

2.博主编译的ffmpeg库链接

参考博客链接


前言

        最近准备在windows上面用ffmpeg做视频编解码工作,找了很多博客对编译方法描述都不全,花了一天时间自己折腾编译通过了,写篇比较完整的博客分享给大家,希望对大家有所帮助,另外,感谢其他博主的分享!

一,源码包下载

1.ffmpeg下载

下载地址: https://ffmpeg.org
(1)在主页面中找到ffmpeg5.0版本点击
(2)点击下载,这里我下载的是gzip包

2.下载x264代码

可以直接下载源码包或者用git克隆

3.下载x265代码

直接通过git下载

二,MSYS2安装

1.下载地址: MSYS2
2.下载完成之后点击安装,默认安装是C盘,C盘空间不够的话建议改下地址

3.然后直接下一步开始安装

4.安装完成之后先不运行,首先修改更新源为国内镜像,这样更快一点
国内镜像我们选择清华源
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.ucrt64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/ucrt64
编辑 /etc/pacman.d/mirrorlist.clang64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/clang64
编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
5.打开msys2命令行:

6.然后执行下面命令配置环境:
(1)更新所有包
pacman -Syu

输入Y选择全部更新
更新完成之后再一次打开命令行执行:
pacman -Syu
(2)安装基础工具:
pacman -S base-devel
直接默认全部安装
(3)安装编译工具
pacman -S mingw-w64-x86_64-toolchain
直接默认全部安装
注意:安装完成之后把msys2安装路径下mingw64/bin添加windows环境变量,不然在
msys2中编译出来的exe文件在windows运行会找不到库。

(4)安装其它工具
pacman -S yasm
pacman -S nasm
pacman -S make
注意:不要使用msys2安装cmake工具,通过windows安装

三,安装cmake工具

1.下载地址: Download | CMake

2.现在完成之后点击安装,然后next
3.勾上同意协议然后next
4.选择把cmake路径添加到环境变量,然后next

5.修改下安装地址,然后next

6.选择install等待升级完成

7.安装完成之后我们在msys2中是找不到cmake命令的,这里我们把windows path添加到msys2中
在windows环境变量中新建一个名字为 MSYS2_PATH_TYPE的环境变量,值改为 inherit,然后重启msys2就可以在msys2中使用安装的cmake了

四,代码编译

1.编译x264

(1)把下载的代码解压到msys2家目录下,即:msys2/home/xxx/(这里xxx表示用户名)
(2)在x264代码下新建一个编译脚本build.sh,脚本内容如下:
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/x264-master
pwd
./configure --prefix=${basepath}/x264_install --enable-static --enable-shared \
--extra-ldflags=-Wl,--output-def=libx264.def
make -j8
make install
${basepath}表示的是脚本所在路径,x264-master表示源码包目录名字,这里对照实际修改
(3)打开msys2 X64终端

进入到build.sh所在路径,执行sh build.sh
等待编译完成
(4)编译完成之后在x264_install下会生成库和头文件

bin中存放的是动态库
include中存放的是头文件
lib中存放的是静态库,给后面ffmpeg链接使用
假如我们需要使用动态库的话,还缺少一个.lib文件

.lib文件可以由.dll直接生成,也可以由.def生成,这里我们可以用.def文件生成,在源码目录下有生成libx264.def文件

把libx264.def拷贝到和libx264-164.dll同一级目录
然后打开vs命令行工具:

进入VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64目录执行
lib.exe /out:输出.lib的路径加文件名 /machine:x64 /def:输入def文件的路径和文件名
如:
lib.exe /out:D:\msys64\home\xxx\x264-master\x264_shared\bin\libx264-164.lib /machine:x64 /def:D:\msys64\home\xxx\x264-master\x264_shared\bin\libx264.def
执行完成之后就会生成.lib文件了

2.编译x265

(1)把下载的代码解压到msys2家目录下,即:msys2/home/xxx/(这里xxx表示用户名)
(2)进入源码包build/msys下,执行下面命令生成makefile
sh make-Makefiles.sh
在弹出的窗口中首先修改安装路径,然后点击configure,最后点击generate生成makefile并关闭窗口
(3)开始编译
make -j8
(4)安装
make install
编译安装完成之后就可以看到生成的文件了

3.编译ffmpeg

(1)把下载的ffmpeg源码解压到msys2家目录下
(2)进入ffmpeg源码包下,新建一个编译脚本build.sh,脚本内容如下:
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/ffmpeg


#添加x264 x265 pkg路径
x264_pkg_path=/home/xxxx/x264-master/x264_install/lib/pkgconfig
x265_pkg_path=/home/xxxx/x265_git/x265_install/lib/pkgconfig
export PKG_CONFIG_PATH=$x264_pkg_path:$x265_pkg_path:$PKG_CONFIG_PATH


./configure --prefix=${basepath}/ffmpeg_install --disable-static --enable-shared \
--enable-libx264 --enable-libx265 --enable-gpl
make -j8
make install
(3)然后在msys2中执行sh build.sh,等待编译完成

五,功能验证

1.x264验证

进入x264生成目录,执行下面命令,如果能够输出版本信息,则表示正常
./x264.exe --version

2.x265验证

进入x265生成目录,执行下面命令,如果能够输出版本信息,则表示正常
./x265.exe --version

3.ffmpeg验证

(1)把x264,x265编译生成的动态库拷贝到ffmpeg生成目录下(和ffmpeg.exe同一级)
(2)执行下面命令,如果能够输出版本信息,则表示正常
./ffmpeg.exe --version

六,其它

1.关于Cannot load library avcodec-59.dll问题

这个问题是由于找不到依赖库导致,我们编译的时候是用Mingw编译的,编译出来的dll还依赖mingw里面的一些dll,打包的时候需要把这部分也放进去,关于查看dll依赖可以在vs命令行中通过以下命令查看:

dumpbin -imports xxx.dll

我这边实测下来编译出来的ffmpeg打包到其它平台还需要下面截图中的几个库,另外可能编译配置不一样依赖也会不一样,如果还是出现类似问题可以通过dumpbin命令查看导入缺少的dll。

2.博主编译的ffmpeg库链接

链接:https://pan.baidu.com/s/1tS1jRfbpccYEP-RpnXabeA 
提取码:05jf 

(编译出来的ffmpeg库还依赖其它库,建议把链接中的mingw依赖库也拷贝到可执行程序目录下)

参考博客链接

1.FFmpeg编译无坑版(Windows篇) - 简书

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37363702/article/details/123277359

智能推荐

阅读笔记:Exploiting High-Level Semantics for NR Image Quality Assessment of Realistic Blur Image_exploiting high-level semantics for no-reference i-程序员宅基地

文章浏览阅读3.5k次。摘要:针对这一问题,我们利用高级语义学,提出了一种新的对于真实模糊图像的无参考图像质量评价方法。1.将整个图像分成多个不重叠的补丁;2.每个补丁由从训练好的DCNN模型提取高级语义特征;3.采用三种不同的统计结构对来自不同的补丁信息进行统计,主要包含一切常见的统计方法;4聚集的特征作为线性回归模型的输入预测图像质量。1.提出的方法图像表示、特征提取、特征聚合和质量预测1.1图像表示预先训练的 dcnn 模型(例如 alexnet)需要一个固定的输入大小。为了满足这个要求,图像可以裁剪,._exploiting high-level semantics for no-reference image quality assessment of

新加入同学期待已久的YOLO V3-程序员宅基地

文章浏览阅读159次。欢迎关注“计算机视觉研究院”计算机视觉研究院专栏作者:Edison_G计算机视觉研究院长按扫描二维码关注我们好久不见各位研友(研究好友,不是考研的小伙伴,嘿嘿)!最近,因为博主事情比较繁..._yolov3 softmax loss logistic loss

深搜回溯与不回溯的区别_深搜什么时候需要回溯-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏10次。一、需要不断尝试以达到最终目的时需要回溯,比如数独、全排列。以下为全排列代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;string str;string temp;vector<bool> vis;void dfs(..._深搜什么时候需要回溯

IntelliJ IDEA 2021.2 : 更新Docker 和 Kubernetes_idea中docker-compose有个x-程序员宅基地

文章浏览阅读810次。除了我们在 EAP 期间描述的其他有用功能外,IntelliJ IDEA 2021.2还包含一些对 Kubernetes 和 Docker 有用的更新。下载IntelliJ IDEA最新版本以下功能概述将帮助您浏览众多更改。Docker 撰写服务同步以前,您的 IDE 仅在“服务”工具窗口中显示正在运行的服务。从这个 EAP 开始,你可以让你的所有 Docker Compose 应用程序出现在那里,即使它们没有运行。要显示它们,您可以单击编辑器窗口右侧的循环箭头图标。服务状态的._idea中docker-compose有个x

程序员必须掌握的核心算法有哪些?_程序的核心算法有什么-程序员宅基地

文章浏览阅读126次。From:https://blog.csdn.net/m0_37907797/article/details/102661778?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task ..._程序的核心算法有什么

pm2 常用命令_pm2 删除进程-程序员宅基地

文章浏览阅读2.6k次。先说一些废话之前学习Nodejs项目的时候使用了pm2作为生产环境的进程管理工具,最近服务器崩了需要重启一些服务,发现有些命令记得不是特别清楚,所以这里写一篇文章帮助自己记忆整理一下pm2的常用命令,后续有需要查阅一下即可~常用命令进入bin目录启动:pm2 start www / pm2 start app.jspm2 start app.js --name="fx67ll" 启动并命名为fx67ll,没有命名的话后续可以用id替代namepm2 start app.js --watch 当_pm2 删除进程

随便推点

uos应用_UOS就是Deepin V20?-程序员宅基地

文章浏览阅读214次。Hello,小伙伴们打扎好。上期呢我发了个视频合集是关于Deepin V20的。当时下面我也提到自己在申请成为UOS的内测,不过一周过去了还没有消息。于是就去网上找了别的内测开发者放出来的内测系统镜像文件,来验证一下是不是UOS就是Deepin V20毕竟通过相关的媒体报道和视频对比来看真的 太相似了,一些old out自媒体直接把uos作为Deepin V20。不过本身其实也没有什么好意外的,毕..._deepin v20 uos

Dex-Net 2.0 论文翻译_deep learning a grasp function for grasping under -程序员宅基地

文章浏览阅读7.9k次,点赞3次,收藏32次。一、绪论1)本文的主要贡献 1、制作dex-net2.0数据集,该数据集包括670万点云数据,又从1500个 3D模型通过GWS(抓手运行空间分析)得到手爪的运行规划 2、设计Grasp Quality Convolutional Neural Network (GQ-CNN),去得到一系列鲁棒性良好的抓取规划 3、设置一种抓取机制,可以对得到的鲁棒性良好的一组抓取规划进行 rank排序,_deep learning a grasp function for grasping under gripper pose uncertainty

JJwt生成Token-程序员宅基地

文章浏览阅读646次。JJwt生成tokenjava中通过jjwt生成tokenpackage com.zom.statistics.tools;import com.zom.statistics.DTO.JwtParams;import com.zom.statistics.DTO.RtvConsoleUser;import com.zom.statistics.exception.LogonException;import io.jsonwebtoken.*;import org.slf4j.Logger_jjwt生成token

电池充电方案总结-程序员宅基地

文章浏览阅读1.3w次。锂离子电池低电压充电(12V以下):多种化学成分电池充电器电路+源码+上位机等http://www.cirmall.com/circuit/3673/%E5%A4%9A%E7%A7%8D%E5%8C%96%E5%AD%A6%E6%88%90%E5%88%86%E7%94%B5%E6%B1%A0%E5%85%85%E7%94%B5%E5%99%A8%E7%94%B5%E8%B7%AF%2B%..._stm32单片机支持13种快冲协议的充电器源码和原理图

如何替换Citrix XenDesktop中使用的vCenter server地址-程序员宅基地

文章浏览阅读477次。一、问题描述:客户重装Vcenter之后(Hostname与之前保持一致)出现如下报错:1.计算机目录显示无法联系到vCenter server2.VM电源状态未知3.测试connection出现如下错误:Attempting to connect to the VCenter server failed due to a certificate error. Check ..._citrix vcenter替换

Android Studio Lint 工具看完这一篇还不够-程序员宅基地

文章浏览阅读6.5k次,点赞12次,收藏24次。前言以前对下面的问题,我的态度是,不报错就是没问题,报错就用快捷键,根据Android Studio提示修复问题,从来不去问个为什么?现在代码洁癖症越来越严重的我,忍不住想看清什么东西在搞鬼。认真看完本文,一定可以学到最新的知识。就算看不下去,也要点个赞收藏,绝对不亏。本文并不是吐槽Lint的不好,而是在学习Lint过程碰到问题,心态是奔溃的,以及解决每个问题带来的喜感。不知道大家有没有注意..._android studio lint

推荐文章

热门文章

相关标签