Windows下编译ffmpeg

前言

在Linux/Mac下编译 ffmpeg是非常方便的。但要在 Windows下编译 ffmpeg还真要花点时间。不过为了满足学员的要求,也方便自己不再被这类问题打扰,今天我就写一下在 Windowns下编译ffmpeg的步骤,以供大家参考。

安装Cygwin

在windows下安装 ffmpeg 的最好方式就是使用Cygwin。 Cygwin是什么呢?简单的说,就是在 Windows上装了一个Linux模拟器。然后你可以在这个模拟器上按照Linux的方式操作 Windows系统。因此,Windows安装了Cygwin之后,你就把它当Linux用就可以了。

既然在Windows上装Cygwin之后,可以像Linux一样操作,那当然编译ffmpeg也就相当的方便了。下面我们就开始安装它吧。

  • 首先,到 Cygwin官网下载 Cygwin 的可执行程序 setup-x86_64.exe。当然,它是 64位的,如果你现在还在用 32位的,那请在 Cygwin官网上找 32位对应的版本。
  • 第二步安装Cygwin。安装 Cygwin的操作非常简单,就是下一步,下一步。但 需要注意一点,在安装的时候我们需要将必须的包安装上。主要有下面几个包: 1. gcc 2. g++ 3. make 4. cmake 5. automake 6. gdb 7. nasm 8. yasm 9. wget

这几个包如何安装呢?要在选择方装包的界面里选"Full"选项,它表式在所有的可安装包里选择,然后在搜索框里填入上面的关键字就可以搜索到了。经过上面的步骤你应该已经成功将 Cygwin 安装到你的 Windows 系统上了。

安装 apt-cyg

虽然我们上面安装好了 Cygwin,但还是很不方便,为什么呢?主要是因为 Cygwin目前设计的还不是很人性化。如果我们安装好Cygwin后,如果缺少了某个包想安装的话就特别麻烦。还需要重新安装 Cygwin才能解决,有没有更好的方式呢?

你遇到的困难,别人也会遇到,不同的是你要么忍了,要么不用了。可别人遇到困难后会去解决困难,这才是人与人之间最大的不同。

话扯的有点远哈。没错,已经有人帮我们解决了这个问题。这是一个很好用的开源工具,它叫 apt-cyg。它与 Ubuntu系统中的 apt一样特别好用,而且使用的方式与 apt也是一个样子的。

如何安装它呢?网上有很多方法,但很多不可行。大家按我这个方法操作一定可以安装成功。

其实,apt-cyg就是一个脚本。我们只需要将这个脚本下载下来就OK了。这里是apt-cyg的下载地址。大家可以在Cygwin下执行下面的命令就好了。

  • 第一步: wget -c https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
  • 第二步 install apt-cyg /bin

有了这个神器,我们就可以安装一些Linux下的常用命令了,是不是很爽?

编译安装 ffmpeg

先别高兴的太早,虽然有了apt-cyg这个神器,但它目前只能安装Linux下的一些常用命令,像我们编译时需要的 x264, x265这些库它是无法找到的。

不能找到的原因也很简单,是由于没有人把编译好的库放到apt-cyg 可以够到的源上。

没有办法,所以我们还必须要用最原始的方法,下代码自己进行编译。下面我们就一步一步的来吧

  • 编译 yasm

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && sudo make install

  • 编译 fdk-aac

wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz tar xvf fdk-aac-0.1.6.tar.gz cd fdk-aac-0.1.6 ./configure make && sudo make install

  • 安装lame

wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz tar -xzf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure --prefix=/usr/local make && sudo make install

注:编译lame遇到的问题:

  • 问题一: 在Cygwin下安装 lame的时候遇到执行 ./configure 失败的情况。如 "error: cannot guess build type; you must sepcify one",对这个问题可以通过下面的步骤来解决:
  1. 安装automake。可以通过 which automake来确认automake 是否已经安装。如果没有安装,可以通使用 apt-cyg install automake进行安装。
  2. 确认automake当前版本。可执行automake --version获取当前automake的版本号。
  3. 将 lame目录下的 config.guess文件替换为 /usr/share/automake-version下的config.guess 文件。
  4. 此时,再执行./configure进就可以下成功了。
  • 问题二: make时出现 "error: '_O_BINARY' undeclared (first use in this function)"的错误,解决办法如下:
  1. 打开出错文件 vi ./frontend/lametime.c
  2. 将下面这段代码注释掉

/* #elif defined __CYGWIN setmod(fileno(fp), _O_BINARY); */

  1. 再执行make就可以成功了。
  • 安装nasm

wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz tar xvf nasm-2.13.03.tar.gz cd nasm-2.13.03 ./configure make && sudo make install

  • 安装x264

wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/last_x264.tar.bz2 bunzip2 last_x264.tar.bz2 tar -vxf last_x264.tar ./configure --enable-static --enable-shared --disable-asm --disable-avs make && sudo make install

  • 安装ffmpeg 从ffmpeg官网下载代码编译, 编译方法如下:

wget -c https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2 bunzip2 ffmpeg-4.0.2.tar.bz2 cd ffmpeg-4.0.2.tar.bz2 ./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared make && sudo make install

FFmpeg编译的问题

  • 问题一:找不到 fdk-aac库 在编译ffmpeg时,有可能会报找不到fdk_aac库的错误。此时我们应该设置一下 PKG_CONFIG_PATH,指定ffmpeg到哪里找我们安装好的库。 上面通过源码安装的库,默认地址为/usr/local/lib下面,当然你可以通过./configure 中的--prefix参数改变这个目录。 如果使用默认路径的话,可以通过下面的命令来指定编译时去哪里找库 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 如果你改变了默认路径,则将后面的 /usr/local/lib/pkgconfig修改为你变更后的路径/xxx/.../lib/pkgconfig即可。

小结

通过上面的步骤我们就可以成功的从 Window上编译出我们可以执行的 ffmpeg了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 音视频小白系统入门常见问题解决办法

    同学们在学习视频课小白系统入门这门课的过程中,经常遇到一些问题,这里总结一些最常见的问题,供大家参考:

    音视频_李超
  • Windows 下使用 ffmpeg 库

    今天我们来聊聊如何在Windows下使用ffmpeg库进行音视开发。一般情况下我很少在Windows下使用ffmpeg, 最主要的原因是在Windows下编译f...

    音视频_李超
  • RTMP播放流媒体过程

    服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:

    音视频_李超
  • 关于P4编程语言的几个误区

    作者简介:张渐修,任职于上海同悦信息科技有限公司从事SDN/P4交换机的市场推广工作。vx:Tooyumzjx

    SDNLAB
  • 26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)

    1.描述 网卡的驱动其实很简单,它还是与硬件相关,主要是负责收发网络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送, 并将接收到的数据包...

    张诺谦
  • 【培训报名倒计时10天】Barefoot Academy – P4实战特训营(第二期)

    P4凭借着网络可编程能力从上到下的渗透,打破了硬件设备对数据转发平面的限制,让数据包的解析和转发流程也能通过编程控制,使其网络更加简单、快速和可编程,全面向用户...

    SDNLAB
  • vuejs基础-事件修饰符

    eadela
  • 【培训】Barefoot Academy – P4实战特训营(第二期)

    P4凭借着网络可编程能力从上到下的渗透,打破了硬件设备对数据转发平面的限制,让数据包的解析和转发流程也能通过编程控制,使其网络更加简单、快速和可编程,全面向用户...

    SDNLAB
  • Hello World in P4

    作者简介:付晨聪,Juniper 中国研发中心软件开发工程师 博客:fuchencong.com

    SDNLAB
  • P4语言,踢馆OpenFlow的SDN新秀

    上周五,由两位SDN大师----来自普林斯顿的Jennifer Rexford和斯坦福的Nick McKeown----共同发起的P4联盟正式对外公布全新的项目...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券