MinGW下简单编译FFmpeg

简介: <div class="bct fc05 fc11 nbw-blog ztag"><div><font style="BACKGROUND-COLOR: #ffff00;">2009.03.21补充:ffmpeg-0.5正式发布,地址为:<a rel="nofollow" href="http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2">[ur
2009.03.21补充:ffmpeg-0.5正式发布,地址为:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url]。修改了第7步,可以通过编译。
 
2009.03.31补充:ffmpeg-0.5的动态库编译。增加5.2步。感谢本日志评论第8楼的deepocean网友的帮忙。
(明天是哥哥的祭日,在这缅怀一下!)
 
2009.04.18补充:加入libamr库,支持amr格式解码。参见第14步。
2009.07.13补充:加入libmp3lame库,支持MP3编码。参见第15步。
2009.07.14补充:加入faac及faad支持。参见第16步。
2009.07.28补充:设置Msys的字体及背景。参见第17步。
2009.08.03补充:加入x264支持。参见第18步。
2009.08.18补充:添加pr命令。参见第10.2步。
 
编译环境要求:
Msys: 1.0.10
MinGW:5.1.4
make: 3.81
gcc: 4.3.2
w32api: 3.13
SDL: 1.2.1
MinGW-Runtime: 3.15
 
一步步的来吧:
1. Minimal SYStem (MSYS) 安装
[url]http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe[/url]
安装到c:/msys/(去掉1.0,因为我看着不爽,(*^__^*) 嘻嘻……),其他的步骤默认。临近最后会出现个dos窗口,最后一句为:
Do you wish to continue with the post install? [yn ]
输入n,结束安装。
 
2. MSYS DTK (Developer Tool Kit) 安装
[url]http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe[/url]
安装到C:/msys/,其他默认。
 
3. 升级下MSYS
[url]http://downloads.sourceforge.net/mingw/msysCORE-1.0.11-2007.01.19-1.tar.bz2[/url]
解压这个文件,将bin/mount.exe, msys-1.0.dll, ps.exe三个文件copy到c:/msys/bin下面覆盖下。
 
4. 升级下MSYS的BASH
[url]http://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2[/url]
解压这个文件,将bin/bash.exe, sh.exe两个文件copy到c:/msys/bin。
 
5. MinGW 安装
[url]http://downloads.sourceforge.net/mingw/MinGW-5.1.4.exe?modtime=1209244789&big_mirror=1[/url]
安装,选择download and install,下两步之后选择Candidate,不要选Current。选择MinGW base tools (autoselected), g++ compiler, MinGW make; 安装路径为c:\mingw。等待下载完了安装吧。O(∩_∩)O……
 
5.2. 还原binutils-2.16.91
很多朋友需要用ffmpeg的dll来做开发。编译的时候是用./configure --enable-memalign-hack --disable-static --enable-shared。但是最终编译出来make install或者将相关的dll拷贝得到ffmepg同级目录后,执行ffmpeg或者ffplay报错: 应用程序正常初始化失败
经过google了许多资料,发现是binutils的版本问题。chinavideo论坛上面有的朋友说是mingw的版本问题,使用MinGW-3.1.0-1.exe会解决。Jeremiah经过试验,发现不大行,从报错的结果来看,MinGW-3.1.0-1.exe没有自带binutils。还是要自己安装。而MinGW-5.1.4.exe的candidate选项会默认给我们安装binutils-2.18.50-20080109-2.tar.gz。而这个binutils会最终导致应用程序正常初始化失败的错误。
Jeremiah和网友deepocean测试了n个binutils的版本,最后发现binutils-2.16.91-20050827-1.tar.gz是最适合的。其他的,ms不行!
解压到c:/mingw,覆盖原来的。
 
6. 配置fstab
copy C:/msys/etc/fstab.sample 成 fstab,确保以下对应:
#Win32_Path    Mount_Point
c:/mingw         /mingw

原始环境就搭建好了。可以启动桌面上行的MSYS了。
 
7. 升级make
[url]http://www.esnips.com/nsdoc/90f17b99-d45a-420e-8cda-23544b64eb0d/?action=forceDL[/url]

下载make-3.81.90-msys.rar,解压,复制make.exe到c:/msys/bin下,覆盖原来的make。
MSYS中输入make -v显示的版本为3.81。
 
8. 升级gcc
[url]http://ftp3.ie.freebsd.org/pub/sourceforge/t/td/tdm-gcc/gcc-4.3.2-tdm-1-core.zip[/url]
解压到c:/mingw,覆盖原来的。
MSYS中输入gcc -v显示的版本为4.3.2。
 
 
10. 添加SDL
[url]http://www.libsdl.org/release/SDL-devel-1.2.11-mingw32.tar.gz[/url]
解压该软件包;
将lib下的所有文件复制到C:\mingw\lib;
将include下的所有文件复制到C:\mingw\include;
将bin下的i386-mingw32msvc-sdl-config复制到C:\mingw\bin,并重命名为sdl-config;
将bin下的SDL.dll复制到C:\mingw\bin。
 
10.2 添加pr.exe
解压,拷贝bin的pr.exe到c:/msys/bin下。
 
整体上的编译环境就搭建好了。
 
copy到c:/msys/home/your_name下面。
解压:tar xjvf ffmpeg-checkout-snapshot.tar.bz2。
vi一个文件ffmpeg-conf.sh,内容为:
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-memalign-hack
执行./ffmpeg-conf.sh。
执行make,应该不会有错误的。
执行ffplay filename就可以播放了。
 
12. 写在编译完之后
Jeremiah只是对ffmpeg进行了简单的编译,如果需要其他的功能还是去google吧。
编译完了应该会出三个可执行文件:ffmpeg.exe, ffplay.exe, ffserver.exe, 但是我编译完了只有前两个,没有ffserver.exe。因为MinGW里面少了关于ffserver用的网络的相关的包。
单独使用ffplay,需要将c:/mingw/bin/SDL.dll和ffplay.exe放到相同的目录下。
Ffmpeg工程组的网站不错
[url]http://www.ffmpeg.com.cn[/url] ,它的论坛 [url]http://bbs.chinavideo.org/index.php[/url] 里面应该有不少关于FFmpeg的东西。
本文所有下载的东西,
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录
http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(
jeremiah.vlc@gmail.com ),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
 
13. Msys的编辑
以前很不喜欢这个系统,因为不能跟cmd或者其他linux的命令行一样复制粘贴,去网上查了一下,发现可以的其实,只不过方式不一样。
复制:选中一段文字,就将这段文字复制到剪贴板。
粘贴:shift+鼠标左键,就将剪贴板的内容粘贴到命令行了。
 
14. libamr库加入
首先下载[url]http://gd.tuwien.ac.at/gnu/mingw/wget-1.9.1-mingwPORT.tar.bz2[/url],解压wget.exe到/mingw/bin下。
下载http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip,解压bin/unzip.exe到/mingw/bin下。
下载两个库:
分别解压到~下面。(~:/home/yourname)。
下载[url]http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip[/url],将这个zip包放到~/amrnb-7.0.0.2下面。
下载[url]http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-700.zip[/url],将这个zip包放到~/amrwb-7.0.0.3下面。
~/amrnb-7.0.0.2和~/amrwb-7.0.0.3下面分别执行:
./configure --disable-shared
make
make install
其中,--disable-shared将产生静态库,如需要动态库,则不要加这个选项。
进入ffmpeg-0.5目录,
保存以下脚本为ffmpeg-conf02.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-memalign-hack --enable-libamr-nb --enable-libamr-wb --enable-nonfree --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
执行以下脚本:
rm -rf config.*
sh ffmpeg-conf02.sh
make
其中rm -rf config.*是为了确保config.h文件能被重写。如果不删除而是覆盖的话,可能会有不能写入覆盖的情况,所以,每次重新从configure开始的编译的话,还是执行下这个rm命令把configure产生的文件都干掉。
这样编译出来的ffplay就可以播放3gp文件了。(附件提供)
 
15. libmp3lame库加入
首先到lame-3.97.tar.gz (不要最新的版本3.98.2,ms有些问题,说audio专码的buffer不够)
解压到~下。
执行以下脚本:
./configure --disable-shared
make
make install
进入ffmpeg-0.5目录,
保存以下脚本为ffmpeg-conf03.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-h
ack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-nonfree -
-extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
执行以下脚本:
rm -rf config.*
sh ffmpeg-conf03.sh
make
make后就可以使用ffmpeg玩MP3的转码了
ffmpeg -i d:/video/01.avi -vcodec mpeg2video -acodec libmp3lame 01.mpg
 
16. libfaac及libfaad库加入
下载faac及faad的源码:
分别解压到~下。
注释掉faad2-2.7/frontend/main.c的第34行:
MinGW下简单编译FFmpeg - 毛毛虫 - 毛毛雨的刻薄 /*#define off_t __int64*/
分别执行:
./bootstrap
./configure --disable-shared --without-mp4v2
make
make install
进入ffmpeg-0.5目录,
保存以下脚本为ffmpeg-conf04.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-h
ack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-libfaac -
-enable-libfaad --enable-gpl --enable-nonfree --extra-ldflags=-L/usr/local/lib -
-extra-cflags=-I/usr/local/include
执行以下脚本:
rm -rf config.*
sh ffmpeg-conf04.sh
make
make后就ffmpeg就可以使用faac及faad了。
ffmpeg -i d:/video/02.mp3 -acodec libfaac 01.aac
 
17. 修改Msys的字体及背景色
用文本编辑器打开C:/Msys/msys.bat,如下:
if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=Black
if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=Yellow
start rxvt -backspacekey     -sl 2500 -fg %FGCOLOR% -bg %BGCOLOR% -sr -fn "Courier New-20" -tn msys -geometry 80x30 -e /bin/sh --login -i
其中上面的Black及Yellow都是颜色。下面的-fn后面跟"字体-大小",80x30为每行80个字符,共显示30行。这都是Jeremiah喜欢的设置。
 
18. x264编码支持
下载x264源码需要用git。
git clone git://git.videolan.org/x264.git
或者去http://www.videolan.org/developers/x264.html中,选 You can browse the source on-line,点选最新的snapshot。
 
将源码解压到~下,执行
./configure --disable-asm --enable-shared
make
make install
进入ffmpeg-0.5目录,
保存以下脚本为ffmpeg-conf04.sh
#this is enable amr mp3 aac aad x264
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure \
                --enable-ffplay \
                --enable-static \
                --disable-shared \
                --enable-memalign-hack \
                --enable-libamr-nb \
                --enable-libamr-wb \
                --enable-libmp3lame \
                --enable-libfaac \
                --enable-libfaad \
                --enable-gpl \
                --enable-nonfree \
                --enable-libx264 \
                --extra-ldflags=-L/usr/local/lib \
                --extra-cflags=-I/usr/local/include
执行以下脚本:
rm -rf config.*
sh ffmpeg-conf05.sh
make
make成功后,使用x264,如下:
$ ffmpeg -i d:/01.avi -f psp -acodec libfaac -ab 94k -vcodec libx264 -cqp 28 -coder 1 -refs 3 -deblockalpha 1 -deblockbeta -1 -me_method umh -subq 9 -me_range 32 -trellis 2 -chromaoffset -2 -nr 0 -bf 2 -b_strategy 1 -bframebias 0 -directpred 3 -g 250 -i_qfactor 1.3 -b_qfactor 1.4 -flags2 +bpyramid+wpred+mixed_refs+8x8dct -er 2 -s 480x320 d:/01.mp4
 
相关文章
|
27天前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
57 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
27天前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
114 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
22天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
67 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
6月前
|
Linux
Linux编译FFmpeg
Linux编译FFmpeg
143 0
|
5月前
|
Ubuntu
蓝易云 - Ubuntu18.04安装编译ffmpeg库
现在,你应该已经在你的Ubuntu 18.04系统上成功安装和编译了FFmpeg库。你可以通过运行 `ffmpeg -version`来验证安装是否成功。
64 0
|
6月前
|
Ubuntu Linux Shell
Android-NDK-clang 编译 FFmpeg
Android-NDK-clang 编译 FFmpeg
185 0
|
6月前
|
移动开发 Unix Linux
ffmpeg编译so
ffmpeg编译so
63 0
|
18天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
82 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
25天前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
45 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
120 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

热门文章

最新文章