存档在 ‘FFmpeg’ 分类

EAGAIN

2012年12月11日

程序在OSX下发生异常,研究了一天,最后发现,原因是OSX下EAGAIN值为35,Windows/Linux下则为11。唉。。。

得学习 git 了

2011年1月25日

前不久,ffmpeg 开发团队发生“政变”,作为政变结果之一,貌似 svn 代码库不更新了,只能通过 git 获取代码,所以,不得不开始学习 git 了。

中文资料 Pro Git
http://progit.org/book/zh/index.html

msysgit(必须)
http://code.google.com/p/msysgit/

首次获取 FFmpeg
$ git clone git://git.ffmpeg.org/ffmpeg.git

更新 FFmpeg
$ git fetch origin master
$ git merge origin master

$ git pull origin master

TortoiseGit (可选)
http://code.google.com/p/tortoisegit/

这个就比较容易使用了,和 TortoiseSVN 基本一样

拖了两年,终于推出 ActiveX 版视频控件

2010年8月18日

两年半前开始接触FFmpeg,两个月内推出Delphi版视频转换控件,一年后推出视频播放控件,而ActiveX版视频控件一直没时间和精力做,最近痛下决心,奋战月余,终于推出了ActiveX版的视频控件,只是迟到了两年,失去了很多机会。

这一个多月的工作内容,主要是使用Delphi开发ActiveX控件、重构原有Delphi控件、以及写VB6的演示程序、还有控件注册、保护环节。其中重构原有Delphi控件没什么问题,但用Delphi开发ActiveX控件耗费了不少时间和精力,主要受限于Automation规范,特别是Int64整型问题,Automation只支持32位整型,并且写VB6演示程序时候,关于Int64这个问题,也破费周折,不过问题都解决了,结果也算满意,最终的ActiveX控件,在VB6下,控件功能基本能和Delphi版媲美。

经过连续奋战,感到有些疲惫,应该休息几天了。最近也没怎么哄女儿玩,单反相机也坏了,要尽快送去检修,都快一个月没给女儿拍照了。

用批处理自动搞定MinGW+MSYS环境

2010年7月14日

个人习惯,有事没事喜欢升级各种软件,对于MinGW+MSYS环境也一样。

虽然MinGW提供了自动安装工具,不过自己不喜欢,感觉不透明,所以以前都是自己手工下载各个文件包,然后手工进行安装的,所谓安装,其实就是解压各种*.gz和*.lzma的压缩文件包而已。

但这个过程是纯手工的,要到sf.net上一个一个压缩包进行下载,还要找对版本,然后一个一个解压等操作,比较繁琐。

两个月前,在VPS上折腾LNMP环境时候,也是写了一堆Bash脚本,来自动进行源码下载、编译、制作安装包等。Bash脚本比较强大,其中之一就是可以写自定义函数,而DOS批处理文件则相对弱的多,不支持自定义函数这一点,就使得写批处理程序时候,麻烦多多。不过经过这次研究,感觉DOS批处理也还凑合,至少经过折腾,最终还是写出了一套批处理文件,可以自动下载相应文件包并解压安装,从而实现一键搞定MinGW+MSYS环境,也还是比较惬意的。

目前是以wiki形式,专门搞了个网站,来公开这些批处理文件。后续会慢慢增加自动下载、编译FFmpeg的Bash脚本,包括自动下载、编译、安装尽可能多的第三方编码解码库。

这个wiki的网站地址暂不打算公开,没有加外链,只提交给了Google,然后等着看用户都是怎么找到这个wiki的。

2011年3月29日 更新:公开wiki网址 http://www.ffmpegwindows.org

批处理文件下载页面 http://www.ffmpegwindows.org/batchs

在Windows下编译FFmpeg详细说明

2010年3月11日

【前言】

本文参考网上大量资料,经整理而成,并经实践验证,最后更新日期2010年3月11日。另外本人使用开发工具为Delphi,不会VC,所以没有编译VC相关的lib库部分。

本文搭建MinGW+MSYS环境路径分别假设为C:\MinGWC:\MSYS,并且为纯手工安装,即下载相应的压缩包,直接解压到相应目录。

本文链接——http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/

本文作者——CodeCoolie

【简介】

■FFmpeg

http://www.ffmpeg.org

FFmpeg是一套用于录制、转换和流化音频、视频的完整解决方案,其中包含一组叫做libavcodec的领先的音频、视频编码解码库。FFmpeg虽然是在Linux平台下开发的,但可以在包括Windows在内的大多数操作系统下进行编译。

■MinGW

http://www.mingw.org

在Windows下编译FFmpeg所需编译环境是MinGW,是Minimalist GNU for Windows的缩写。MinGW包含Windows平台头文件、GCC、以及一些GNU工具。

■MSYS

http://www.mingw.org/wiki/msys

MSYS是MinGW的Shell环境,是Minimal SYStem的缩写。MSYS提供了一些开发工具,如make等。

【编译环境】

■MinGW

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

GNU Binutils:binutils-2.20.1-2-mingw32-bin.tar.gz
MinGW Runtime:mingwrt-3.18-mingw32-dev.tar.gz
MinGW API for MS-Windows:w32api-3.14-mingw32-dev.tar.gz
GCC Version 4:gcc-core-4.2.1-sjlj-2.tar.gz(GCC 4.4有bug,将x264、xvid等与ffmpeg一起编译时候GCC会崩溃)

将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MinGW

复制或重命名如下文件,其实就是去掉sjlj后缀:

从C:\MinGW\bin\gcc-sjlj.exe到gcc.exe

NOTICE:libiberty.a使用GNU Binutils包里较新的,而不是GCC Core包里的

■MSYS

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

msysCORE-1.0.11-bin.tar.gz
msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma
make-3.81-2-msys-1.0.11-bin.tar.lzma
coreutils-5.97-2-msys-1.0.11-ext.tar.lzma(只需要pr.exe,configure ffmpeg时候用到)
vim-7.2-1-msys-1.0.11-bin.tar.lzma(不打算使用vi可以不装)

将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MSYS

■MinGW+MSYS

编辑C:\MSYS\etc\fstab文本,指定MinGW在MSYS下的挂接目录

C:/MinGW /mingw

■yasm

编译x264时候需要

http://www.tortall.net/projects/yasm/

下载:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz

解压,编译安装:

./configure –prefix=/mingw
make
make install

【基本库】

■zlib

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz

将其解压到C:\MinGW

删除C:\MinGW\lib\libz.dll.a(否则会使用动态链接,需要libz.dll)

■bzip2

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz

将其解压到C:\MinGW

删除C:\MinGW\lib\libbz2.dll.a(否则会使用动态链接,需要libbz-2.dll)

■SDL

http://www.libsdl.org/

编译ffplay时候需要

下载:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz

解压,修改Makefile:CROSS_PATH := /mingw

编译安装:make cross

【FFmpeg基本编译】

源码取得:svn://svn.mplayerhq.hu/ffmpeg/trunk

配置编译:假设安装路径为/FFmpeg/Release

./configure –prefix=/FFmpeg/Release –enable-memalign-hack
make
make install

【编解码库】

假设第三方库安装路径为/olibs

■libgsm

GSM support via libgsm

GSM 06.10 lossy speech compression

http://user.cs.tu-berlin.de/~jutta/toast.html

下载gsm-1.0.12.tar.gz

解压,修改Makefile中的CC = gcc -ansi -pedantic为CC = gcc

编译安装:

make

编译到后来会出错,但库已经编译完成,用如下命令拷贝即可

cp lib/libgsm.a /olibs/lib/
cp inc/gsm.h /olibs/include/gsm/

ffmpeg编译参数:–enable-libgsm

■libmp3lame

MP3 encoding via libmp3lame

http://sourceforge.net/projects/lame/files/

下载lame-3.98.3.tar.gz

解压,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面这行

$(ECHO) “non_pic_object=’$*.o'” >>$@

$(ECHO) “non_pic_object=’ .libs/$*.o'” >>$@

编译安装:

./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
make
make install

ffmpeg编译参数:–enable-libmp3lame

■opencore-amr

AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb

http://sourceforge.net/projects/opencore-amr/

下载opencore-amr-0.1.1.tar.gz(0.1.2编译需要g++、libstdc++.dll.a

解压,注释掉以下Makefile中的几行

./opencore-amr/amrnb/Makefile
install: libopencore-amrnb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
endif

./opencore-amr/amrwb/Makefile
install: libopencore-amrwb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
endif

编译安装:

make CC=gcc
make install PREFIX=/olibs

ffmpeg编译参数:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb

■libogg

供libvorbis和libtheora用

http://www.xiph.org/downloads/

下载libogg-1.1.4.tar.gz

解压,编译安装:

./configure –prefix=/olibs –disable-shared
make
make install

■libvorbis

Vorbis encoding via libvorbis

http://www.xiph.org/downloads/

下载libvorbis-1.2.3.tar.gz

解压,编译安装:

./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install

ffmpeg编译参数:–enable-libvorbis

■libtheora

Theora encoding via libtheora

http://www.xiph.org/downloads/

下载libtheora-1.1.1.zip

解压,编译安装:

./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install

ffmpeg编译参数:–enable-libtheora

■libx264

H.264 encoding via x264

http://www.videolan.org/developers/x264.html

ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

下载最新的源码包

解压,编译安装:

./configure –prefix=/olibs
make
make install

ffmpeg编译参数:–enable-gpl –enable-libx264

■libxvid

Xvid encoding via xvidcore

http://www.xvid.org/

下载xvidcore-1.2.2.tar.gz

解压,修改:

./build/generic/configure: “libxvidcore. <- “xvidcore.

编译安装:

cd xvidcore/build/generic
./configure –prefix=/olibs –disable-shared
make
make install

删除/olibs/lib/libxvidcore.dll

ffmpeg编译参数:–enable-gpl –enable-libxvid

■libfaac、libfaad

ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布

【FFmpeg高级编译】

假设安装路径为/FFmpeg/Release,假设第三方库所在路径为/olibs

配置编译:

./configure \
–prefix=/FFmpeg/Release \
–disable-debug \
–disable-static \
–enable-shared \
–enable-gpl \
–enable-version3 \
–enable-avfilter \
–enable-avfilter-lavf \
–enable-memalign-hack \
–enable-avisynth \
–enable-libgsm \
–enable-libmp3lame \
–enable-libopencore-amrnb \
–enable-libopencore-amrwb \
–enable-libtheora \
–enable-libvorbis \
–enable-libx264 \
–enable-libxvid \
–extra-cflags=-I/olibs/include \
–extra-ldflags=-L/olibs/lib
make
make install