本文是在 msys2 环境下进行操作的,不熟悉 msys2 的可以看 《MSYS2介绍》。

FFmpeg-n4.4.1 版本的源码编译,无论你是在 Linux 还是 Windows 环境编译,默认都会有 h.264 编码器。


Linux 下的是使用 V4L2 来做的 h.264 编码器,如下:

V4L2 全称是 Video for Linux2 ,是Linux系统的视频设备内核驱动。m2m 全称是什么我也不知道,后面补充。


Windows 下的是使用 Media Foundation 来做的 h.264 编码器,如下:



x264 有些功能是上面两个自带的 h.264 编码器没有的,所以本文介绍一下编译 FFmpeg 的时候如何引入 x264。

先讲解 MinGW 下如何引入 x264,在 msys2 的云仓库,也是有 x264 的安装包的,所以我们不用自己编译,如下:

直接执行以下命令,安装 x264 即可。

pacman -S mingw-w64-x86_64-x264

提示:如果下载比较慢,可以切换 msys2 的源为中科大的源,请看《MSYS2 更换国内源》

从下图可以看到,跟之前安装 SDL 一样,也是安装了一堆 x264 的头文件,静态库,动态库。

安装完 x264 之后,因为他那些什么 pc 文件都放好给你的了,所以只需要再 configure的时候加上 --enable-libx264 即可,如下:

./configure \
--prefix=/home/loken/ffmpeg/build64/ffmpeg-n4.4.1-mingw \
--enable-gpl \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--enable-nonfree \
--enable-libx264 \
--enable-sharedmake -j12
make install

编译完成之后,使用 ffmpeg.exe -codecs 即可查看 h.264 的编码器。如下:

用 dumpbin 查看发现,ffmpeg.exe 依赖 avcodec-58.dll ,而 avcodec-58.dll 依赖 libx264-161.dll,如下:


下面再来讲一下 MSVC 的环境下 怎么引入 x264 扩展,MinGW 编译出来的 x264 动态库应该也是不太方便被 MSVC 使用的,所以还是重新编译一下 x264 的源码。

先删掉之前安装的 mingw-w64-x86_64-x264 ,防止干扰。

pacman -R mingw-w64-x86_64-x264

发现删除 mingw-w64-x86_64-x264 很麻烦,会不断地依赖反转,无法正常删除,所以暂时不删应该也影响不大。


x264的官网 是 https://x264.org ,源码地址,x264 这个开源项目没有发布过一次版本,tag 也没有,所以只能拉最新代码。拉下来的代码如下:

x264 没有 vs 的 sln 文件,不过他的 configure 脚本定义了 CC 编译器变量,只需要把这个变量从 gcc 换成 cl.exe 即可。

x264 的源码是可以用 msvc 编译的,所以改脚本的 CC 变量是可以的。编译命令如下:

CC=cl ./configure --prefix=/home/loken/ffmpeg/build64/x264-msvc --enable-shared --disable-asmmake -j12
make install

上面的命令写法有点奇怪,CC=cl 后面直接跟 ./configure 。这种写法是把 CC 变量设置成cl,再执行 configure。这样设置变量的好处是只对当前命令生效。例如 后面的 make 就没有 CC 变量。

CC 这个变量在 configure 文件的用法是这样的,如下:

CC="${CC-${cross_prefix}gcc}"

可以把上面的 shell 看成一个 三元表达式,如果 CC 定义了,就CC=CC,如果没定义CC = ${cross_prefix}gcc。


编译完成之后,libx264.dll.lib 跟 libx264-157.dll, 文件都生成了,如下:

现在只需要把相关的头文件,动态库跟lib导入库,放到 msys2 的目录,让 FFmpeg 的编译脚本能找到 这些 lib 跟dll 即可。

FFmpeg 编译的时候会用到 哪些 x264 的头文件?其实可以直接看 pacman 安装的时候装了哪些头文件,其实是一样的,参考着搞就行。

上图这些头文件,在 x264 的源码包都是有的,我们把这些头文件拷贝到 /usr/local/include 目录下,请看下图:

提示:思路不要被 mingw-w64-x86_64-x264 安装包干扰,配置 msvc 环境要假设我们从来没安装过 mingw-w64-x86_64-x264 这个安装包。我上面贴个图只是提供一下找头文件的思路。

提示:avisynth_c.h 这个文件是在 源码包的 extra 目录下的。



接下来再配置一下 x264.pc 文件,路径跟内容如下:

prefix=/home/loken/ffmpeg/build64/x264-msvc
libdir=/usr/local/lib/x64/
includedir=/usr/local/include/x264/Name: x264
Description: H.264 (MPEG4 AVC) encoder library
Version: 0.157.x
Libs: -L/usr/local/lib/x64 libx264.dll.lib
Libs.private:
Cflags: -I/usr/local/include/x264/

提示:上面的导入库我写了全称,没有 -l 选项。因为用 -l 好像有点小问题。

要执行以下命令,把 /usr/local/lib/pkgconfig/ 加入搜索路径:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH

下面再次编译 FFmpeg,如下:

./configure \
--prefix=/home/loken/ffmpeg/build64/ffmpeg-n4.4.1-msvc-x264 \
--enable-gpl \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--enable-nonfree \
--enable-libx264 \
--enable-shared \
--toolchain=msvcmake -j48
make install

编译成功之后,只需要把之前 msvc 编译出来的 libx264-157.dll 拷贝到 ffmpeg.exe 同目录的位置即可,如下:

参考资料:

1,《使用MSVC编译x264的办法》


推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习]

FFmpeg引入x264扩展相关推荐

  1. ios 编译ffmpeg 支持 x264 fdk-aac openssl 并裁剪库大小

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2018-10-11更新 android平台编译 右转 新的报错信息 ./lib ...

  2. ffmpeg支持x264插件

    1 ffmpeg安装x264插件 2 要安装x264模块首先要先装nasm 3 安装脚本如下[复制即可使用] #!/bin/bash yum -y install epel-release  & ...

  3. Ubuntu 下编译ffmpeg和x264解编码器(翻译的一篇文章:)

    拿出自己一篇早期接触Ubuntu时翻译的文章,对逝去的SEO-DIC.COM.CN这个网站默哀. Ubuntu 下编译ffmpeg和x264解编码器 今年初由于个人的一些原因和其它因素:希奥开源(ht ...

  4. Ubuntu下编译ffmpeg+openh264+x264

    [笔记] Ubuntu下编译ffmpeg+openh264+x264 原文:https://www.cnblogs.com/journeyonmyway/p/4648820.html - ffmpeg ...

  5. ffmpeg与x264有什么区别?

    ffmpeg是一个编解码库,功能丰富,其自带H.264解码功能,但是要实现H.264编码需要集成X264将其作为编码器 参考文章:ffmpeg与x264差异?

  6. 七、FFmpeg使用---X264静态库编入FFmpeg

    欢迎加入技术交流群 群号: 552340860 ####下面用到的脚本.静态库资料. 上篇文章六.FFmpeg使用-X264的编译粗略的讲了一下如何编译X264,和之前FFmpeg的编译方式差不多,就 ...

  7. ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表

    ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表 分类: 多媒体 2010-07-13 11:31 1072人阅读 评论(0) 收藏 举报 转载自:扶凯[http:/ ...

  8. linux 编译ffmpeg 支持x264, x265

    原址 1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 [plain] view plaincopy sudo apt-get - ...

  9. Ubuntu 编译安装ffmpeg,mplayer,x264全教程支持VDPAU(高清硬解)

    这个是针对Ubuntu 10.04 AMD64的安装ffmpeg,mplayer,x264全教程,包括VDPAU Ubuntu 10.10AMD64也是可以的. 目前mplayer仍然使用svn,编译 ...

最新文章

  1. 【星榜单】盘点那些坑爹的国产手机们
  2. 使用netty编写IM通信界面
  3. Bounce宣布关于BOT代币迁移的链上治理提案已通过
  4. java实现线性顺序表
  5. 转载windows的网络错误问题,备需要时查看
  6. 一.mtk平台的gpio控制
  7. HikariCP对各Java版本的支持
  8. python发送微信及企业微信消息
  9. DVWA靶机-存储型XSS漏洞(Stored)
  10. 拥有火绒后关闭Windows防火墙
  11. Neo4j之CQL基础
  12. 使用CoreImage实现素描滤镜
  13. 浅谈Flink对象重用(object reuse)
  14. centos 中文乱码_StudingThinking_百度空间
  15. TP+UC+DZ同步登陆问题汇总
  16. 非标准武术擂台机器人的设计思想——机械结构的设计思想
  17. 【ACWing】909. 下棋游戏
  18. Android USB 扫码枪获取扫描内容
  19. idea git rebase ---- 合并多个提交到某个分支(实用)
  20. 三维gis系统 开发

热门文章

  1. 人人网的今天,就可能是大家的明天
  2. 怎么样选择适合自己平台的服务器--群联科技筱筱
  3. iTOP-3588开发板Android 固件编译
  4. matlab 绘图常用命令
  5. 计算机毕业设计node.js+vue+Element电商后台管理系统
  6. CATIA批量导入导出数据到EXCEL
  7. php爬虫程序是什么,php爬虫怎么运行
  8. 全栈开发实战 | SSM框架整合完整教程
  9. 前端pdf预览、pdfjs的使用
  10. 资源福利网站「迅雷小站」-资源多无广告!