Ubuntu Linux 上交叉编译FFmpeg Windows SDK

FFmpeg 是一个开源且跨平台的音视频解决方案,集采集、转码、流式化为一身,项目的libavcodec编解码模块和libavformat媒体格式模块,支持非常非常丰富的编解码格式和容器封装格式,是做媒体相关开发工作必须要掌握和借鉴的一个项目。定制和编译ffmpeg是做流媒体开发迟早要面对的,Linux平台上相对简单,windows平台就比较麻烦了。本文的目的就是详细介绍下如何基于Ubuntu交叉编译环境,编译和定制ffmpeg。

概述

ffmpeg主要是基于linux开发,当然它也支持windows,不过并不支持visual studio系列IDE(因为它使用了大量C99特性,而vs不支持C99),所以要想在windows上使用,必须要通过mingw或cygwin来编译,或者在linux上构建windows交叉编译环境,后者要简单些。这里有个网站http://ffmpeg.zeranoe.com/,作者提供了ffmpeg已经编译好的windows版本,包括静态连接的,动态连接的,以及sdk,基本上隔几天就编译一次。大家可以先上去看一下,如果它编译的符合你的需求(上次看的时候它好像没有加入libfaac,现在不知道了),而你又懒得编译,就可以使用它的。对linux不太熟悉的朋友可能不太想继续往下看,请不要担心,ubuntu的安装和使用非常简单,直接在虚拟机里使用就行。编译的时候,你也只需要使用几个很简单的命令而已。

环境准备

1. Ubuntu Linux,本人使用的Ubuntu 11.10,安装在VMware Workstation中

2. MinGW编译环境,我们要非常感谢,zeranoe,它做了一个自动下载和编译ffmpeg所需要的mingw及其他工具链的脚本,请到http://ffmpeg.zeranoe.com/blog/下载最新的“MingGW-w64 Build Script 2.8.2”。解压后新建一个目录把它放进去(本人的目录是/home/haibindev/studio/mingw-w64/),然后打开终端,cd
到MinGW-w64所在目录,执行"chmod +x mingw-w64-build-2.8.2",使这个脚本可以执行。之后运行"./mingw-w64-build-2.8.2",就可以按照提示来做了。如果它提示你缺少依赖库,就按照它的提示先安装依赖库,方式是,执行"sudo apt-get install 库名字"。

3. 设置终端的环境变量

执行一下命令即可。(注意,如果你关闭了终端,或者新建一个终端,需要重新执行一下这个命令。

export PATH="$PATH:/home/haibindev/studio/mingw-w64/mingw-w64-i686/bin"

下载FFmpeg源码和你需要的编解码库的源码

这点不用做什么介绍,先到ffmpeg官网,下载ffmpeg源代码,然后再Google你需要的编解码库,到相关网站下载即可。本人这次编译共下载了以下代码,以做大家参考。

libx264 libfaac libmp3lame libopenjpeg libogg libspeex libvorbis libtheora libxvid ffmpeg

下载完后解压,然后统一放到一个目录中,本人的目录是/home/haibindev/studio/opensource/。下图是全家福(build-ffmpeg是编译ffmpeg的工作目录,下面介绍,freetype我没有编译)。

编译

为了方便,我把所有库编译后的结果都存放到了一个统一的目录/home/haibindev/opensdk,方法请见下面的编译命令。除了第一个命令以外,其余的都是configure命令,执行完之后,还需要执行make命令,然后执行make install。我就不再写出来了。

1. 先执行以下命令

# ln -s "/usr/bin/pkg-config" /home/haibindev/studio/mingw-w64/mingw-w64-i686/bin/i686-w64-mingw32-pkg-config

2. libx264

# ./configure --enable-static --enable-win32thread --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --cross-prefix=i686-w64-mingw32-

3. libfaac

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --with-mp4v2=no

4. libmp3lame

# CFLAGS=-DFORCEINLINE= ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-frontend

5. libopenjpeg

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared

6. libogg

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared

7. libspeex

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest

8. libvorbis

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest

9. libtheora

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest --disable-vorbistest --disable-sdltest --with-ogg-includes=/home/haibindev/opensdk/include --with-ogg-libraries=/home/haibindev/opensdk/lib

10. libxvid

# ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --disable-pthread

11. ffmpeg

先创建/home/haibindev/studio/opensource/build-ffmpeg,然后cd到该目录,执行

# ../ffmpeg-0.8.7/configure --disable-static --enable-shared --enable-version3 --enable-gpl --enable-nonfree --disable-pthreads --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-cross-compile --target-os=mingw32 --arch=x86 --prefix=/home/haibindev/opensdk/ffmpeg --cross-prefix=i686-w64-mingw32- --extra-cflags="-I/home/haibindev/opensdk/include" --extra-ldflags="-L/home/haibindev/opensdk/lib"

注意,编译xvid时需要先编辑configure文件,然后删除里面的“-mno-cygwin”字段,否则make会失败,提示-mno-cygwin无效。libmp3lame命中中最前面的“CFLAGS=-DFORCEINLINE= ”是为了防止mp3lame中的一个编译错误,要记得带上。

以上编译成功之后,ffmpeg win32 sdk就出现在/home/haibindev/opensdk/ffmpeg里面了,bin目录下就是我们需要的所有文件了。

验证编译后的程序

拷贝到windows上,在命令中运行ffmpeg.exe,看

验证一下,做个转码操作就行了,执行

ffmpeg.exe -i s.avi -vcodec libx264 -acodec libfaac s.mp4

运行正常,生成了264编码和aac编码的,mp4文件,播放正常,ok了。

最后说一下

请大家编译的时候千万别忘了configure之后,要执行make和make install!另外,一定要看清楚我贴出来的命令,把我的目录,换成你的目录,不要直接拷贝,那是不行的,因为你不叫haibindev:)。如果有的库在make的时候出现了编译错误,简单修改一下源文件就能搞定。

ffmpeg有很多配置选项,你可以对它深度定制,可以把avcodec编译得很小,大家可以自己研究。

时间: 2024-09-22 00:32:57

Ubuntu Linux 上交叉编译FFmpeg Windows SDK的相关文章

基于Ubuntu交叉编译FFmpeg Windows SDK

写在前面 FFmpeg是一个开源且跨平台的音视频解决方案,集采集.转码.流式化为一身,项目的libavcodec编解码模块和libavformat媒体格式模块,支持非常非常丰富的编解码格式和容器封装格式,是做媒体相关开发工作必须要掌握和借鉴的一个项目.定制和编译ffmpeg是做流媒体开发迟早要面对的,linux平台上相对简单,windows平台就比较麻烦了.本文的目的就是详细介绍下如何基于ubuntu交叉编译环境,编译和定制ffmpeg.   一  概述 ffmpeg主要是基于linux开发,当

《GNS3实战指南》——2.4 在Ubuntu Linux上安装

2.4 在Ubuntu Linux上安装 GNS3可以在许多不同的Linux发行版本上正常运行,但是其中大多数缺乏文档.本节将揭开神秘的面纱,展示在基于UNIX的平台上运行GNS3是一件很简单的事.选择Ubunt,是因为它是一个很常用的发行版本. 在Linux上安装GNS3有两种方法.可以通过包管理器安装一个捆绑包,也可以从源代码安装.使用包安装既快速又容易,但缺点是无法摆脱已经移植到特定平台的GNS3版本,它可能不是最新的版本.这里还可以使用源代码方便地安装.源代码安装仅多出几个步骤,且提供最

《面向机器智能的TensorFlow实践》一2.5 源码构建及安装实例:在64位Ubuntu Linux上安装GPU版TensorFlow

2.5 源码构建及安装实例:在64位Ubuntu Linux上安装GPU版TensorFlow 如果希望使用带有GPU支持的TensorFlow,那么最可能的选择是从源码构建和安装.本节给出了一个完整的安装参考实例,详细介绍了安装和运行TensorFlow所需的每一具体步骤.请注意,本示例中的操作系统为64位Ubuntu Linux发行版,因此如果你使用的是其他Linux发行版,则可能需要对某些命令进行修改(如apt-get).如果希望在Mac OS X上从源码构建TensorFlow,笔者推荐

在Ubuntu Linux上部署IBM DB2 Express-C和PHP

完成本文中的安装和配置步骤后,您将拥有一个全功能的 PHP Web 应用服务器,它使用 DB2 Express-C 作为后端数据服务器. 在运行 Ubuntu Linux® 操作系统的系统上结合 IBM® DB2® Express-C 的强大功能与 Apache HTTP Server 和 PHP 编程语言,能够提供一个强大.灵活且可靠的应用程序开发平台.此平台是小型企业.开发人员.教师和学生的理想选择,因为这些软件组件可供免费下载和使用. 本文旨在提供有关在 Ubuntu Linux 操作系统

在Ubuntu Linux上架设Web服务器详解

Apache 是一种功能强大的Web服务器.如今,Internet上无数运行在Linux上的Apache服务器正为Web世界的日益繁荣提供着有力的支撑.本文将向读者介绍如何在Ubuntu Linux系统迅速搭建Apache Web服务器. 尽管Ubuntu 是一种新兴的Linux分支,但Ubuntu 组织却为Apache提供了丰富的支持软件,这些软件都可以从发行版的光盘获取,也可以从官方站点轻松下载.所以,Ubuntu非常适合作为Web服务器的平台. 一. 安装Apache 下面,我们首先介绍如

WinUSB: 在linux上创建一个Windows的可引导的U盘

hi,小伙伴们, 我不是来这里宣传使用微软的windows的,如你所见这是一篇关于如何创建一个可引导的U盘的文章.在Windows中也有一个这样的工具,它就是好用的Power ISO. 你可能还记得在学校或者家里有时需要从DVD或者.iso文件建立一个可引导启动的windows U盘,但你没有使用Windows,就没法使用Power ISO来完成. 在linux上你可以用Unetbootin,但是新版的Unetbootin不再支持.虽然你可以使用旧版本,并且在这之前需要将U盘格式化成NTFS格式

Ubuntu Linux上安装SSH和Vsftpd的方法

安装SSH: sudo apt-get install ssh 用ssh登录主机: SSH username@ipaddress eg:admin@10.24.0.2 安装vsftpd: vsftpd 是可在 Ubuntu 中使用的 FTP 守护程序之一.它在安装.设置和维护方面十分方便.要安装 vsftpd 您可以使用下列命令: vsftpd - FTP 服务器配置 你可以编辑 vsftpd 配置文件,/etc/vsftpd.conf,来配置缺省设置.缺省状态下只允许匿名 FTP.如果您希望禁

如何在Linux上永久挂载一个Windows共享

如果你已经厌倦了每次重启 Linux 就得重新挂载 Windows 共享,读读这个让共享永久挂载的简单方法. 在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情.想想多少企业正在采用 Linux,需要在这两个平台上彼此协作.幸运的是,有了一些工具的帮助,你可以轻松地将 Windows 网络驱动器映射到一台 Linux 机器上,甚至可以确保在重启 Linux 机器之后共享还在. 在我们开始之前 要实现这个,你需要用到命令行.过程十分简单,但你需要编辑 /etc/fstab

如何在 Linux 上永久挂载一个 Windows 共享

在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情.想想多少企业正在采用 Linux,需要在这两个平台上彼此协作.幸运的是,有了一些工具的帮助,你可以轻松地将 Windows 网络驱动器映射到一台 Linux 机器上,甚至可以确保在重启 Linux 机器之后共享还在. 在我们开始之前 要实现这个,你需要用到命令行.过程十分简单,但你需要编辑 /etc/fstab 文件,所以小心操作.还有,我假设你已经让 Samba 正常工作了,可以手动从 Windows 网络挂载共享到