IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Windows系统下Mysys+MinGW编译FFmpeg库教程(支持x264编码) -> 正文阅读

[开发工具]Windows系统下Mysys+MinGW编译FFmpeg库教程(支持x264编码)

在这里插入图片描述
系统:Windows10 1909


准备工具

FFmpeg源码:下载地址
MSYS-1.0.11:下载地址
PKG-CONFIG:下载地址
yasm-1.3.0-win32:下载地址
coreutils-5.97-3-msys-1.0.13-bin.tar.lzma:下载地址
x264源码:下载地址
MinGW-4.8.1:下载地址


环境搭建

安装MSYS-1.0.11.exe,我将其安装在"C:\msys64"路径下
在这里插入图片描述
弹出窗口,输入’n’回车
在这里插入图片描述

  • 解压PKG-CONFIG.7z,将pkg-config.exe与libglib-2.0-0.dll,拷贝到C:\msys\1.0\bin目录下
  • 将下载后的yasm-1.3.0-win32.exe改名yasm.exe,拷贝到C:\msys\1.0\bin目录下
  • 将coreutils-5.97-3-msys-1.0.13-bin.tar.lzma解压,将里面的pr.exe,拷贝到C:\msys\1.0\bin目录下
  • 将FFmpeg源码ffmpeg-2.4.tar解压到C:\Users\m\Downloads(自己选择文件夹)
  • 将x264源码x264-master.tar.bz2解压到C:\Users\m\Downloads
  • 解压MinGW,将其bin目录加入系统环境变量path
    在这里插入图片描述

编译x264
到C:\msys\1.0目录下,双击msys.bat启动mysys,测试gcc

gcc -v

出现版本信息说明正常
在这里插入图片描述
否则,输入以下命令

export PATH=/C/Qt/Tools/MinGW/bin:$PATH

其中/C/Qt/Tools/MinGW/bin是mingw的bin目录路径(C:\Qt\Tools\MinGW\bin)
切换到x264源码目录,并编译x264

cd /C/Users/m/Downloads/x264-master.tar/x264-master/x264-master
./configure --prefix=./build --enable-static --disable-asm
make
make install

–disable-asm 因为没有安装nasm工具,关闭汇编优化功能(可能影响程序执行效率)
–enable-static 生成静态链接库供ffmpeg编译时使用
–prefix=./build 编译x264生成文件的目录

编译成功后,在C:\Users\m\Downloads\x264-master.tar\x264-master\x264-master\build目录下有三个子目录
在这里插入图片描述
bin目录存放x264程序,include存放x264的头文件,lib存放静态库文件,include和lib目录是我们编译ffmpeg要用到的


编译ffmpeg

切换目录到ffmpeg源码目录,编译

cd /C/Users/m/Downloads/ffmpeg-2.4.tar/ffmpeg-2.4
./configure --prefix=./build --enable-shared --disable-static --enable-yasm --enable-libx264 --enable-gpl --target-os=mingw32 --arch=
x86_64 --extra-cflags="-I/C/Users/m/Downloads/x264-master.tar/x264-master/x264-master/build/include -Dx264_bit_depth=X2
64_BIT_DEPTH" --extra-ldflags="-L/C/Users/m/Downloads/x264-master.tar/x264-master/x264-master/build/lib"
make
make install

configure选项说明:
–prefix=./build 编译后安装的目标文件夹
–enable-shared 生成动态链接库
–enable-yasm 启用汇编优化功能
–enable-libx264 启用x264编码功能
–enable-gpl 使用x264功能必须启用的选项
–arch=x86_64 编译64位版本库,(如果是32位,使用–arch=x86)
-I 指定附加头文件目录,此处附加x264头文件的目录
-L 指定附加库目录,此处附加x264静态库文件的目录
-D 编译时定义宏,相当于#define x264_bit_depth X264_BIT_DEPTH,将x264_bit_depth替换。否则编译时出现如下错误:
在这里插入图片描述
具体原因参考:这里
编译成功后的ffmpeg库就在C:\Users\m\Downloads\ffmpeg-2.4.tar\ffmpeg-2.4\build目录下了。其中有四个目录
在这里插入图片描述
bin目录存放编译好的动态库文件和对应lib文件,ffmpeg程序。
在这里插入图片描述
而include文件夹内包含ffmpeg的头文件
在这里插入图片描述
lib文件夹包含libxxx.dll.a文件,对于mingw,可以看作一个静态库文件,只需要在编译时使用参数-lxxx.dll,就可以使用了,但是在运行时,还是需要bin文件夹内动态库文件的支持。有点类似于msvc的dll动态库文件所对应的lib文件。实质上并不是一个完整的静态库文件。在被编译进程序后,运行时还是需要dll文件的支撑
在这里插入图片描述
share文件夹内有一些程序例子


测试ffmpeg程序

ffmpeg -v

在这里插入图片描述
测试x264编码功能,将视频文件转换为x264编码

ffmpeg -i input.mp4 -vcodec libx264 out.mp4

转换成功
在这里插入图片描述


ffmpeg hello word
msvc:
新建一个控制台工程
主程序编辑以下代码

#define __STDC_CONSTANT_MACROS
#include "stdafx.h"

//因为ffmpeg是用c语言写的,对于fmpeg的头文件,需要用extern "C" 修饰,以正常使用它的库
extern "C"
{
#include "libavutil/log.h"
};

int _tmain(int argc, _TCHAR* argv[])
{
	// 设置控制台输出级别
	av_log_set_level(AV_LOG_DEBUG);
	// 打印输出字符串Hello World !
	av_log(NULL, AV_LOG_DEBUG, "%s", "Hello World !\n");
	av_log(NULL, AV_LOG_DEBUG, "%s", "Hello World !\n");
	system("pause");
	return 0;
}

配置头文件目录为ffmpeg库的include文件夹
在这里插入图片描述
如果你的vs版本低于2013,需要下载msinttypes-r26.zip这个文件并解压。其中包括c99标准的两个头文件inttypes.h,stdint.h。并将解压后的目录也加入项目头文件附加包含目录里面
配置附加库目录为ffmpeg库目录里bin文件夹
在这里插入图片描述
配置要链接的库,就是ffmpeg库的bin文件夹里面所有的lib文件名
在这里插入图片描述
将ffmpeg库的bin文件夹里面的dll文件拷贝到程序目录下
在这里插入图片描述

之后点击编译运行
在这里插入图片描述
mingw:
用记事本编辑一个源程序
helloword.cpp


extern "C"
{
#include "libavutil/log.h"
};

int main(int argc, char* argv[])
{
	// 设置控制台输出级别
	av_log_set_level(AV_LOG_DEBUG);
	// 打印输出字符串Hello World !
	av_log(NULL, AV_LOG_DEBUG, "%s", "Hello World !\n");
	av_log(NULL, AV_LOG_DEBUG, "%s", "Hello World !\n");
	system("pause");
	return 0;
}

使用如下命令编译

g++ helloword.cpp -D__STDC_CONSTANT_MACROS -I../build/include -L../build/lib -lavcodec.dll -lavdevice.dll -lavfilter.dll -lavformat.dll -lavutil.dll -lswresample.dll -lswscale.dll

-D__STDC_CONSTANT_MACROS 定义__STDC_CONSTANT_MACROS宏
-I 指定头文件目录,也就是fffmpeg库的include文件夹
-L 指定库文件目录,也就是ffmpeg库的lib文件夹
-lxxx 指定链接的库文件,也就是ffmpeg库的lib文件夹内libxxx.dll.a。在链接参数-l中,需要去掉lib前缀和.a后缀
编译通过后,同样的将ffmpeg库的bin目录下的所有dll文件拷贝到程序所在目录,之后运行程序

./a.exe

在这里插入图片描述


在使用mysys2进行编译时,我会遇到以下问题
在这里插入图片描述
通过使用参数--target-os=mingw32可以得到解决,而之后的问题
在这里插入图片描述
在这里插入图片描述
无法解决,因此只能使用mysys-1.0.11进行编译,并且使用mysys-1.0.11不会遇到以上的问题


相关下载

yasm.exe
ffmpeg-2.4.tar
x264-master.tar
MSYS-1.0.11.exe
pkg-config for windows
coreutils-5.97-MSYS-1.0.11-snapshot.tar
i686-4.8.1-release-win32-dwarf-rt_v3-rev2.7z

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:51:32  更:2022-05-18 17:53:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:17:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码