搜档网
当前位置:搜档网 › ffmpeg编译、使用与常见问题

ffmpeg编译、使用与常见问题

ffmpeg编译、使用与常见问题
ffmpeg编译、使用与常见问题

FFMPEG编译、使用与常见问题

一. Linux下FFMPEG的安装与测试 (1)

二. FFMPEG编译中出现的一些问题与解决方法 (4)

三. FFMpeg简介及命令选项参数 (8)

四. FFMPEG与x264的编译 (13)

一.Linux下FFMPEG的安装与测试

a. 先装mp3在linux下的包:lame-3.97.tar.gz;

tar -xvzf lame-3.97.tar.gz;

cd lame-3.97;

./configure --enable-shared --prefix=/usr/;

make;

make install;

b. 支持Ogg Vorbis:

as4自带相应的rpm包,你可以安装一下如下rpm包:

libvorbis, libvorbis-devel,libogg, libogg-devel 一般情况下as4都会安装

c. 支持xvid x264,现在最流行的两种高质量的压缩格式

xvid的编译安装

wget https://www.sodocs.net/doc/0e4072746.html,/downloads/xvidcore-1.1.0.tar.gz

tar zvxf xvidcore-1.1.0.tar.gz

cd xvidcore-1.1.2/build/generic

./configure --prefix=/usr --enable-shared

make

make install

x264的获取用git:

git clone git://https://www.sodocs.net/doc/0e4072746.html,/x264.git

cd x264

./configure --prefix=/usr --enable-shared

make

make install3

d. AC3和dts编码的支持

as4系统似乎已经支持ac3编码,编译的时候只要加--enable-a52 --enable-gpl参数就行libdts编译参数

tar zxvf libdts-0.0.2.tar.gz

./configure --prefix=/usr

make

make install

e. mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行

下载请到https://www.sodocs.net/doc/0e4072746.html,/modules/mydownloads/

tar zxvf faad2-2.5.tar.gz

cd faad2

echo > plugins/Makefile.am

echo > plugins/xmms/src/Makefile.am

sed -i '/E_B/d' configure.in

autoreconf -vif

./configure --prefix=/usr

make &&

make install

tar zxvf faac-1.25.tar.gz

cd faac

sed -i '/[2de].M/d' configure.in

echo "AC_OUTPUT(common/Makefile common/mp4v2/Makefile libfaac/Makefile frontend/Makefile include/Makefile Makefile)" >> configure.in

autoreconf -vif

./configure --prefix=/usr

make &&

make install

f. 支持3gp格式,这也是现在好多手机支持的格式,因为手机用户是我们的主要用户,所以也得支持编译

编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。

wget https://www.sodocs.net/doc/0e4072746.html,/ftp/Specs/archive/26_series/26.204/26204-510.zip

解压以后把里面的文件都拷贝到libavcodec/amrwb_float/

wget https://www.sodocs.net/doc/0e4072746.html,/ftp/Specs/archive/26_series/26.104/26104-510.zip

解压以后把里面的文件都拷贝到libavcodec/amr_float/

g. 安装ffmpeg:

//as4.3系统已经支持ac3编码,只要加--enable-a52 --enable-gpl参数就行

./configure --prefix=/opt/ffmpeg/ --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-a52 --enable-xvid --enable-libx264 --enable-faad --enable-faac --enable-gpl --enable-libogg --enable-vorbis --enable-pthreads;

make clean

make

make install

h. 配置环境变量

如果第g步中—prefix的参数设置是=/usr,则不用进行下面的设置。

FFMPEG_HOME=/opt/ffmpeg

export PATH=$PATH:$FFMPEG_HOME/bin

export LD_LIBRARY_PATH=$FFMPEG_HOME/lib

export FFMPEG_HOME

i. 使用ffmpeg转换视频为flv文件:

ffmpeg -i "076.mov" -y -ab 32 -ar 22050 -b 800000 -s 640*480 "test5.flv"

ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)

j. 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等)

安装:

MPlayer-1.0rc1.tar.bz2(http://www.mplayerhq.hu/design7/dload.html下载)

all-20061022.tar.bz2(http://www.mplayerhq.hu/MPlayer/releases/codecs/下载)

tar xvfj all-20061022.tar.bz2

cd /usr/local/lib/

mkdir codecs

Extract the file "all-20061022.tar.bz2" and copy its contents

into the directory /usr/local/lib/codecs/

解压缩后把所有的文件copy到/usr/local/lib/codecs/这个目录

tar xvfj MPlayer-1.0rc1.tar.bz2

cd MPlayer-1.0rc1

./configure

make

make install

ok,这样就安装好了。

转化格式:

可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.

mencoder /input/a.rmvb -oac lavc -lavcopts acodec=mp3:abitrate=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o /output/a.avi

再执行ffmpeg -i "/opt/input/a.avi" -y -ab 32 -ar 22050 -b 800000 -s 640*480 /opt/output/a.flv"就可以转了。

k.视频抓图:

ffmpeg -i "test5.flv" -y -ss 3 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f image2 "1.jpg" //获取静态图

ffmpeg -i "/opt/input/a.mpg" -vframes 30 -y -f gif "/output/1.gif" //获取动态图;

不提倡抓gif文件;因为抓出的gif文件大而播放不流畅

g. 补充出现过的问题

由于mencoder执行的时候报了这个错误,所以有补充了下面这2个包

Error: /lib/libstdc++.so.5: version `GLIBCPP_3.2' not found (required by /usr/local/lib/codecs//drvc.so)

Win32 LoadLibrary failed to load: drvc.so, /usr/local/lib/codecs//drvc.so, /usr/lib/win32/drvc.so, /usr/local/lib/win32/drvc.so

Error loading dll

ERROR: Could not open required DirectShow codec drvc.so.

下载这2个包

compat-libstdc++-devel-8-3.3.4.2.i386.rpm

compat-libstdc++-8-3.3.4.2.i386.rpm

运行:rpm -ivh compat-libstdc*.rpm

这样这个错误就解决了。

备注:按照上面的操作,目前测试通过的视频格式有:

wmv wm asf asx mpg mpeg mpe vob mov 3gp mp4 avi dat m4v

mencoder把wmv9 rm rmvb转化成avi,在通过ffmpeg转成flv格式。

支持音频:

mp3 wav wma ram ra

二.FFMPEG编译中出现的一些问题与解决方法

首先,从svn上拿到ffmpeg的源代码,执行如下脚本:

./configure --prefix=/usr --enable-gpl --enable-shared --enable-pthreads --disable-ffserver --disable-ffplay

不会请用./configure -help

在这里,大家可以看到我并有enable任何的编码器。主要是想在没有其他干扰的情况下,先尝试一下ffmpeg的独立编译。果不其然,执行./configure就遇到了问题:

1. bad interpreter:No such file or directory

问题原因:脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.

解决方法:可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的

(1)vi filename

(2):set ff?

可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出即可。

2. mv: cannot create regular file `config.h': Permission denied

在configure文件中如下行中出了问题:

************************************

cmp -s $TMPH config.h &&

echo "config.h is unchanged" ||

mv -f $TMPH config.h

*************************************

解决问题:

网上有达人提示:Try cp command (cp for copy)

试了一下改成cp -f $TMPH config.h,立马见效。

达人又曰:If cp works and mv doesn't,the problem is originated when linux tries to unlink the original file. Has the source directory the sticky bit set?

3. 执行make的时候,遇到如下问题

****************************************

/usr/include/linux/videodev.h:55: error: syntax error before "ulong"

/usr/include/linux/videodev.h:71: error: syntax error before '}' token

libavdevice/v4l.c: In function `grab_read_header':

libavdevice/v4l.c:77: error: storage size of 'tuner' isn't known

libavdevice/v4l.c:141: error: invalid application of `sizeof' to incomplete type `video_tuner' libavdevice/v4l.c:148: error: invalid application of `sizeof' to incomplete type `video_tuner' libavdevice/v4l.c:77: warning: unused variable `tuner'

****************************************

修改方法:

把ulong rangelow, rangehigh; /* Tuner range */

改为:

unsigned long rangelow, rangehigh; /* Tuner range */

4.

****************************************

cd ./libavutil/ && ln -sf libavutil.so.50 libavutil.so

ln: creating symbolic link `libavutil.so' to `libavutil.so.50': Operation not supported

make: *** [libavutil/libavutil.so] Error 1

****************************************

原因:因为我的code是在windows下通过VMware共享过来的。

出现这类问题,主要是由于在编译的时候,要用ln去建立一些软链接,而这些文件是从Windows中,通过VMWare虚拟机共享进Linux的,而虽然此种操作在Linux系统中很常见,但Windows不支持,所以,编译会报错。

解决方法:把code拷贝到Linux下

5.

*****************************************

/usr/bin/ld: cannot find -lavutil

collect2: ld returned 1 exit status

make: *** [libavcodec/libavcodec.so.52] Error 1

*****************************************

原因&解决方法:仔细分析了一下编译时的语句,发现—L的路径不对。因为我在解决上一个问题时,把code从hgfs下移到Linux下,所以configure产生的config.mak里的路径还是老的。

重新编译

Make clean

./configure …

make

最后make install,顺利完成编译工作。

6.

编译ffmpeg之后找不到库,连结一下,参看下面

https://www.sodocs.net/doc/0e4072746.html,/ThomasNet/archive/2008/01/31/1059372.html

转换3gp,mp4的时候出现错误

[aac @ 0x404765dc]FAAD library: cannot resolve faacDecGetErrorMessage in libfaad.so.0!

这是faad2升级之后的一个bug解决方法在这里可以修改FFmpeg/libavcodec/faad.c然后再重新编译或者修改libavcodec/faad.c

That means ffmpeg could not load faacDecGetErrorMessage symbol from libfaad.so.0 library. First you should comfirm that libfaad.so.0 library is located in the path which are defined by the LD_LIBRARY_PATH environment variable. Second, this problem may caused by the changes of faad2 upgrading. You can edit this file libavcodec/faad.c:

line 222:

do { static const char* n = “faacDec” #a; \

Modify it as below:

do { static const char* n = “NeAACDec” #a; \

7.

今天编译了一下,遇到一个问题,

运行ffmpeg时,出现提示:

error while loading shared libraries: /usr/lib/libavutil.so.49: cannot restore segment prot after reloc: Permission denied

我是root啊,说我没权限,上网查了一下,用这个命令:

chcon -t texrel_shlib_t /usr/lib/libavutil.so.49

然后再运行ffmpeg看看,如果还有其它的库文件出现同样提示,如法炮制,最终能成功运行ffmpeg了。

x264 ffmpeg problems

Hi there, i'm trying to encode a video with x264, but for some reason (though i have compiled and installed videolan's x264) ffmpeg ./configure script is not picking up x264 even though i specified ./configure --enable-libx264 --enable-gpl i just get

ERROR: x264 not found

**note, when i tried to compile x264 with mp4 output support, i got a whole lot of "muxers.c:774: error:" errors and could not compile x264, but without it, it compiled.

Answer:

Make sure you built x264 with the "--enable-shared" option and that you

ran (as root) /sbin/ldconfig immediately after your "make install".

Then go back to the ffmpeg source tree, "make distclean" and start

again.

三.FFMpeg简介及命令选项参数

Ffmpeg简介:

ffmpeg包括一组软件,ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。两个库文件libavcodec和libavformat。

ffmpeg项目由以下几部分组成:

ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件。ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器,也支持时间平移ffplay 用SDL和FFmpeg库开发的一个简单的媒体播放器

libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的.

libavformat 一个包含了所有的普通音视格式的解析器和产生器的库.

ffmpeg作为媒体文件处理软件,基本用法如下:

ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile

输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。大部分常见的格式都能够“通杀”。象常见的各种mpeg,AVI封装的DIVX和Xvid 等等,具体的格式支持列表可以使用ffmpeg -formats查看或直接查阅文档。

另:由于Linux把设备视为文件,因此-i选项后可以跟设备名。比如DV,视频卡,光驱或者其它的各类设备。

输出的内容通过Options调整。列出几个主要的选项

-vcodec 视频流编码方式

-b 视频流码率(默认只有200k,一般都需要手动设置,具体的数值视codec选择而定)

-r 视频流帧数(一般说来PAL制式通常用25,NTSC制式通常用29)

-s 视频解析度(分辨率,也要视codec和你的需要而定。通常改变某个视频流的解析度是很耗费CPU的事情。另:具体写法使用“数字x数字”的形式。中间是小写字母“x”,这个用过mplayer的应该都知道)

-t 处理持续时间。

-acodec 音频流编码方式

-ab 音频流码率(默认是同源文件码率,也需要视codec而定)

-ar 音频流采样率(大多数情况下使用44100和48000,分别对应PAL制式和NTSC制式,根据需要选择)

还有些可能需要用到的选项如:

-vn和-an分别是屏蔽视频流和屏蔽音频流,分别对源文件处理一次即可得到分离的音频和视频

-author -title分别是设置媒体文件的作者和title

-f选项是强制使用某种格式

-target type是使用预置的格式转换(可以转成dvd,vcd或svcd)

除此之外还有些更高级的选项,如设定vbr,或设定high quality,或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦,DV转vcd或dvd啦,网上下载的电影转成vcd或dvd都不一定需要用到它们。具体的使用方法在man里面有介绍。简单明了。

1.视频音频格式转换

Ffmpeg能使用任何支持的格式和协议作为输入:

*比如你可以输入YUV文件:ffmpeg -i /tmp/test%d.Y /tmp/out.mpg

它将要使用如下文件:

/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,

/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V,等等…

*你能输入原始的YUV420P文件:ffmpeg -i /tmp/test.yuv /tmp/out.avi

原始的YUV420P文件包含原始的YUV极性,每帧以Y平面开始,跟随U和V平面,它们是Y平面水平垂直的一半分辨率

*你能输出原始的YUV420P文件:ffmpeg -i mydivx.avi -o hugefile.yuv

*你能设置几个输入文件和输出文件

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg 上面的命令行转换音频文件a.wav和原始的YUV 视频文件a.yuv到mpeg文件a.mpeg

*你也能同时转换音频和视频:ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

上面的命令行转换a.wav的采样率到22050HZ并编码为mpeg音频

*你也能同时编码到几种格式并且在输入流和输出流之间建立映射

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

上面的命令行转换一个64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在输出流的顺序上定义了那一路输入流是用于每一个输出流的,

转码解密的VOB:

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用

2. Ffmpeg使用语法

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果没有输入文件,那么视音频捕捉就会起作用。

作为通用的规则,选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。

缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。

3. 选项

a) 通用选项

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。。。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间[-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置作者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置,只需要输入如下的就可以了:

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置

-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了offset秒。[-]hh:mm:ss[.xxx]的格式也支持

b) 视频选项

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频缺省25

-s size 设置帧大小格式为WXH 缺省160X128.下面的简写也可以直接使用:

Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比4:3 16:9 或1.3333 1.7777

-croptop size 设置顶部切除带大小像素单位

-cropbottom size –cropleft size –cropright size

-padtop size 设置顶部补齐的大小像素单位

-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如000000代表黑色)

-vn 不做视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-maxrate bitrate设置最大视频码率容忍度

-minrate bitreate 设置最小视频码率容忍度

-bufsize size 设置码率控制缓冲区大小

-vcodec codec 强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。

-sameq 使用同样视频质量作为源(VBR)

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file

c)高级视频选项

-g gop_size 设置图像组大小

-intra 仅适用帧内编码

-qscale q 使用固定的视频量化标度(VBR)

-qmin q 最小视频量化标度(VBR)

-qmax q 最大视频量化标度(VBR)

-qdiff q 量化标度间最大偏差(VBR)

-qblur blur 视频量化标度柔化(VBR)

-qcomp compression 视频量化标度压缩(VBR)

-rc_init_cplx complexity 一遍编码的初始复杂度

-b_qfactor factor 在p和b帧间的qp因子

-i_qfactor factor 在p和i帧间的qp因子

-b_qoffset offset 在p和b帧间的qp偏差

-i_qoffset offset 在p和i帧间的qp偏差

-rc_eq equation 设置码率控制方程默认tex^qComp

-rc_override override 特定间隔下的速率控制重载

-me method 设置运动估计的方法可用方法有zero phods log x1 epzs(缺省) full

-dct_algo algo 设置dct的算法可用的有0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC

-idct_algo algo 设置idct算法。可用的有0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM

-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE

-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)

-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

-mbd mode 宏块决策0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD

-4mv 使用4个运动矢量仅用于mpeg4

-part 使用数据划分仅用于mpeg4

-bug param 绕过没有被自动监测到编码器的问题

-strict strictness 跟标准的严格性

-aic 使能高级帧内编码h263+

-umv 使能无限运动矢量h263+

-deinterlace 不采用交织方法

-interlace 强迫交织法编码仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大

-psnr 计算压缩帧的psnr

-vstats 输出视频编码统计到vstats_hhmmss.log

-vhook module 插入视频处理模块module 包括了模块名和参数,用空格分开

D)音频选项

-ab bitrate 设置音频码率

-ar freq 设置音频采样率

-ac channels 设置通道缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

E)音频/视频捕获选项

-vd device 设置视频捕获设备。比如/dev/video0

-vc channel 设置视频捕获通道DV1394专用

-tvstd standard 设置电视标准NTSC PAL(SECAM)

-dv1394 设置DV1394捕获

-av device 设置音频设备比如/dev/dsp

F)高级选项

-map file:stream 设置输入流映射

-debug 打印特定调试信息

-benchmark 为基准测试加入时间

-hex 倾倒每一个输入包

-bitexact 仅使用位精确算法用于编解码测试

-ps size 设置包大小,以bits为单位

-re 以本地帧频读数据,主要用于模拟捕获设备

-loop 循环输入流。只工作于图像流,用于ffserver测试

四.FFMPEG与x264的编译

参考:http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/ FFmpeg x264 encoding guide

May 17th, 2010 Leave a comment Go to comments

Preset files are available from the FFmpeg source code in the ffpresets subdirectory. Using the 0.5 release or current svn trunk of FFmpeg, running make install will install the preset files to ${prefix}/share/ffmpeg and just specifying -vcodec libx264 -vpre is sufficient for ffmpeg to find the preset.

Otherwise, you can either copy *.ffpreset from the FFmpeg source into ~/.ffmpeg/ or you can point to a preset file directly in the argument of -fpre in your command line.

Skip to the examples.

Basic FFmpeg Usage

To construct an ffmpeg command line, you need to understand a few fairly simple things. The basic command line format is:

ffmpeg [input options] -i [input file] [output options] [output file]

* input options –these are usually mandatory information that is missing about the source file (for example, in the case of a sequence of image files this could be the frame rate), or the seek position corresponding to the desired start point of the stream

* output options –audio and video filtering (alteration of the sample rate, number of channels, frame dimensions, frame rate), audio and video codecs and their corresponding options, container format and related options

Normally the minimum one should specify in an ffmpeg command line would be something

like:

ffmpeg -i INFILE -acodec ACODEC -ab 96k -vcodec VCODEC -b 500k OUTFILE

…replacing the capitalised values as appropriate. When using x264, we need to add some extra bits as the defaults are bad.

x264 – Rate Control Choices

Firstly, you need to decide on a rate control method. This controls how bits are allocated within the stream. At a rudimentary level, you want the quality to remain constant but this implies that more complex frames use more bits and less complex frames use less bits.

Rate control methods available:

* constant quantisation parameter –not recommended anymore unless you know you want it

* constant rate factor – good for one pass when the priority is quality and file size/bit rate is not really a concern

* one pass average bit rate – good for streaming purposes or targeting a bit rate when two-pass is unfeasible

* two pass variable bit rate – good for targeting a bit rate when you have the time to spend on two passes (though the first pass can be quite fast) and are writing to a file

Or in prose, CQP mode is mostly deprecated by CRF as CRF maintains more constant quality which was usually the aim of someone using CQP mode. If you care more about quality than bit rate then I would recommend using one pass CRF to save yourself a bit of time. Evaluate various rate factors between about 25 and 15 (a lower value is higher quality and higher bit rate) until you find a quality level/approximate bit rate with which you’re happy and then you can use that value forever more. :)

One pass average bit rate is good if you need to aim for an approximate bit rate but don’t have time to run two passes. If you have the time then two passes are recommended as the bits will be better distributed to maintain constant quality.

To use one pass CQP:

-cqp

To use one pass CRF:

-crf

To use one pass ABR or two pass VBR:

-b BIT_RATE -bt BIT_RATE

x264 – FFmpeg Preset Choices

Secondly, you need to choose an appropriate preset from those available.

Presets available (for lossy compression):

* quality related:

o ultrafast

o superfast

o veryfast

o faster

o fast

o medium – x264 CLI default

o slow

o slower

o veryslow

o placebo

* first pass:

o _firstpass – for example medium_firstpass

* profile constraints:

o baseline

o main

Note: Profile constraint presets need to be specified with a second -vpre option after the quality/first pass preset, e.g. -vpre slower -vpre main

x264 – Recommended General Options

For all rate control methods you will probably want libx264 to select the number of threads to use to maximise its performance on your CPU(s):

-threads 0

Two-Pass Example

So if you wanted to encode using two-pass VBR, the command line would be something like: ffmpeg -i INPUT -an -pass 1 -vcodec libx264 -vpre slow_firstpass -b BIT_RATE -bt BIT_RATE -threads 0 OUTPUT.mp4

Note: We don’t encode the audio in the first pass because we will not be using the data that was output.

ffmpeg -i INPUT -acodec libfaac -ab 128k -pass 2 -vcodec libx264 -vpre slow -b BIT_RATE -bt BIT_RATE -threads 0 OUTPUT.mp4

Single-Pass Constant Rate Factor (CRF) Example

Or for a single pass CRF encode:

ffmpeg -i INFILE -acodec libfaac -ab 96k -vcodec libx264 -vpre slow -crf 22 -threads 0 OUTPUT.mp4

Related Reading

Also, see my x264 <-> FFmpeg option mapping and an externally maintained list of mappings with descriptions of what the options mean.

linux下x264库ARM交叉编译

linux下x264库ARM交叉编译 一、准备工作 1、x264库源码下载地址:http://videolan/developers/x264l 作者目前的版本是x264-snapshot-20160511-2245 2、编译器arm-none-Linux-gnueabi-gcc 二、编译步骤 1、解压安装包 tar -xzvf last_x264.tar.bz2 cd x264-snapshot-20160511-2245 2、修改配置文件 ./configure --disbale-asm 注意:这里加了--disable-asm选项是因为arm-none-linux-gnuabi工具链是没有汇编器,所以禁止此选项 由于未指定--prefix,所以程序会默认安装/usr/local/bin目录下 3、修改config.mak 主要是将相关选项修改为arm-none-linux-gnuabi相关的配置,修改内容如下: SYS_ARCH=ARM CC=arm-none-linux-gnueabi-gcc CFLAGS=-Wno-maybe-uninitialized -Wshadow -O3 -ffast-math -Wall -I. -I$(SRCPATH) -std=gnu99 -D_GNU_SOURCE -fomit-frame-pointer -fno-tree-vectorize LD=arm-none-linux-gnueabi-gcc -o 4、make 5、make install 我的本意是想生成lib264.a静态库的,很奇怪,在x264-snapshot-20160511-2245目录下可以找到lib264.a和lib264.so及相关的头文件,但是没有在/usr/lib/local目录下找到libx264.a,但是有x264。 有点不太理解,而且很多过程基本上按照的网上提供的方式参考操作的,很纳闷哪里出

opencv移植到arm详细过程

Opencv-2.1.0 的arm移植 我的环境 Host:Ubuntu 14.04 Target:tq2410 with Linux 2.6.30.4 Crossing Compiler:arm-linux-gcc 4.3.2 一交叉编译链的安装 1# cd /usr/local 解压,即可得到arm-none-linux-gnueabi 目录 # tar xzvf arm-none-linux-gnueabi-4.3.2.tgz -C ./ 2 编辑/etc/bash.bashrc文件添加把编译器路径到环境变量PA TH中, 只要在这个文件中添加下面这2 个语句即可: PATH=/usr/local/arm/4.3.2/bin:$PA TH export PA TH 3 编辑完毕后使用source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输入: # arm-none-linux-gnueabi-gcc -v 如果输出下面的信息则表面设置成功: Using built-in specs. Target: arm-none-linux-gnueabi Configured with:/scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu

如何用FFmpeg编写一个简单播放器详细步骤介绍

如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFmpeg, 播放器, 编写 FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具。FFMPEG 几乎为你把所有的繁重工作都做了,比如解码、编码、复用和解复用。这使得多媒体应用程序变得容易编写。它是一个简单的,用C编写的,快速的并且能够解码几乎所有你能用到的格式,当然也包括编码多种格式。 唯一的问题是它的文档基本上是没有的。有一个单独的指导讲了它的基本原理另外还有一个使用doxygen生成的文档。这就是为什么当我决定研究 FFMPEG来弄清楚音视频应用程序是如何工作的过程中,我决定把这个过程用文档的形式记录并且发布出来作为初学指导的原因。 在FFMPEG工程中有一个示例的程序叫作ffplay。它是一个用C编写的利用ffmpeg来实现完整视频播放的简单播放器。这个指导将从原来Martin Bohme写的一个更新版本的指导开始(我借鉴了一些),基于Fabrice Bellard的ffplay,我将从那里开发一个可以使用的视频播放器。在每一个指导中,我将介绍一个或者两个新的思想并且讲解我们如何来实现它。每一个指导都会有一个C源文件,你可以下载,编译并沿着这条思路来自己做。源文件将向你展示一个真正的程序是如何运行,我们如何来调用所有的部件,也将告诉你在这个指导中技术实现的细节并不重要。当我们结束这个指导的时候,我们将有一个少于1000行代码的可以工作的视频播放器。 在写播放器的过程中,我们将使用SDL来输出音频和视频。SDL是一个优秀的跨平台的多媒体库,被用在MPEG播放、模拟器和很多视频游戏中。你将需要下载并安装SDL开发库到你的系统中,以便于编译这个指导中的程序。 这篇指导适用于具有相当编程背景的人。至少至少应该懂得C并且有队列和互斥量等概念。你应当了解基本的多媒体中的像波形一类的概念,但是你不必知道的太多,因为我将在这篇指导中介绍很多这样的概念。 更新:我修正了在指导7和8中的一些代码错误,也添加-lavutil参数。欢迎给我发邮件到dranger@https://www.sodocs.net/doc/0e4072746.html,,讨论关于程序问题、疑问、注释、思路、特性等任何的问题 指导1:制作屏幕录像 源代码:tutorial01.c

视频解码中用到的ffmpeg交叉编译技巧

视频解码中用到的ffmpeg交叉编译技巧 一、简介 FFmpeg是一个集录制,转换,音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。 由于ffmpeg是基于linux开发的,源代码和windows下最常见的visual studio提供的c/c++编译器不兼容,因此不能直接使用msvc++编译,想要使用ffmpeg,需要在windows下配置一个类似Linux 的编译环境,并将ffmpeg编译为二进制库以后,再利用其进行进一步开发。 目前,windows下可直接使用的最新版本是由ffmpeg工程组,于2008年4月份发布的ffmpeg full sdk v3.2。该sdk尽可能的集成了更多的编解码器。 在应用中,使用该开发包存在2个缺陷,第一,该sdk编译基于ffmpeg r12790,编解码效率上,当前已经有了较大的提升;第二,该开发包包含了很多不需要的编解码器,需要尽可能减少开发包的体积及关联的库的个数。基于以上需求,需要自己编译出windows下可用动态库及静态库。 使用到的库文件有4个,libavcodec,libavformat,libavutil,libswscale,其中库 libavcodec,libavformat用于对媒体文件进行处理,如编解码;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能,libswscale主要用于图像格式转换及缩放。因效率的需要,我们选择了 ffmpeg-mt版本,同时通过配置编译尽量减少相关文件的体积。 网上类似编译过程说明较多,但实际编译过程中碰到一些问题,这些问题的解决花费了不少时间,本文档对这一过程进行记录,以便后续维护及学习。 二、编译环境搭建 windows下ffmpeg编译环境有多种可选择方案。这里我们使用MinGW+MSYS。 1.下载mingw+msys并安装 https://www.sodocs.net/doc/0e4072746.html,/projects/mingw/ mingw,默认安装,在choose components时选择g++ compiler及MinGW Make Msys,默认安装, Do you wish to continue with the post install【yn】,y! Do you have mingw installed?【yn】,y Where is your mingw installation? C:/mingw

linux编译ffmpeg支持x264,x265

linux 编译ffmpeg 支持x264, x265 1. 前言 本教程涉及的ffmpeg, x264, x2652. 环境依赖 2.1 删除系统中安装的ffmpeg等库 [plain] view plain copy sudo apt-get --purge remove ffmpeg mplayer x264 x265 2.2 安装依赖库 [plain] view plain copy sudo apt-get update sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev \ libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev 注: 服务器版本可忽略 libsdl1.2-dev libva-dev libvdpau-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev2.3 下载源代码 (1) ffmpeg [plain] view plain copy git clone git://https://www.sodocs.net/doc/0e4072746.html,/ffmpeg.git ffmpeg

(2) x264[plain] view plain copy <pre name="code" class="plain"><pre name="code" class="plain">git clone git://https://www.sodocs.net/doc/0e4072746.html,/x264.git (3) x265[plain] view plain copy hg clone https://https://www.sodocs.net/doc/0e4072746.html,/multicoreware/x265 (4) yasm yasm 是x86平台的一个汇编优化器, 能够加快ffmpeg x264的编译 [plain] view plain copy wget https://www.sodocs.net/doc/0e4072746.html,/projects/yasm/releases/yasm-1.3.0.ta r.gz tar xzvf yasm-1.3.0.tar.gz 3. 编译 3.1 配置编译输出目录 [plain] view plain copy export FFMPEG_PATH="YOUR_PATH" export PATH="$FFMPEG_PATH/bin:$PATH" 例如我输出目录为$HOME/ffmpeg_2.6.3/build_out 那么: [plain] view plain copy export

linphone语音版移植

Linphone在Linux X86下的编译 (一) Linphone依赖库准备: libogg-1.1.3.tar.gz(https://www.sodocs.net/doc/0e4072746.html,/releases/ogg/libogg-1.1.3.tar.gz) speex-1.2beta3.tar.gz(依赖于libogg) libosip2-3.3.0.tar.gz(https://www.sodocs.net/doc/0e4072746.html,/gnu/osip/libosip2-3.3.0.tar.gz) libeXosip2-3.3.0.tar.gz(https://www.sodocs.net/doc/0e4072746.html,/Unix/NonGNU/exosip/libeXosip2-3.3.0.tar.gz) 依赖库打包下载地址:https://www.sodocs.net/doc/0e4072746.html,/source/1743975 readline(optional) intltool-0.35.0.tar.gz(optional) ffmpeg(提供Linphone视频支持,如不需视频功能可不要) Linphone版本:linphone-3.2.0.tar.gz O S: Fedora9(VmWare下) (二) 在Linux的/home/cena/目录下新建目录linphone在其中建立sources、build、x86_target、arm_target ;注:这里cena为用户名,以下类同![root @BCD cena]# mkdir –p /home/cena/linphone/sources,/home/cena/linphone/build \ /home/cena/linphone/x86_target, /home/cena/linphone/arm_target 将相应的库与Linphone源码拷贝到sources目录下 |soureces --| libogg-1.1.3.tar.gz --| libosip2-3.3.0.tar.gz

linphone分析

目录 1 LINP HONE 的编译3 1.1 LINPHONE 在ARM 上的编译环境说明3 1.2 LINPHONE 依赖的库3 1.3 LINPHONE 编译脚本3 1.4 编译过程中的问题4 2 LINP HONE 代码分析4 2.1 LINPHONE 的初始化分析4 2.1.1 LINPHONEC 的初始化5 2.1.2 LINPHONE_CORE 的初始化5 2.1.3 ORTP 的初始化5 2.1.4 MEDIASTREAM2 的初始化6 2.1.5 EXOSIP 的初始化6 2.2 LINPHONE 的通话过程分析6 2.2.1 LINPHONE 的命令处理分析7 2.2.2 LINPHONE 的呼叫过程分析7 2.2.3 LINPHONE 的通话过程分析8 2.2.4 LINPHONE 的响应过程分析8 2.3 LINPHONE 中创建以及应用自定义过滤器9 2.3.1 过滤器的基本功能9 2.3.2 过滤器的通用接口10 2.3.3 自定义过滤器10 Linphone 的编译与代码分析 1 Linphone 的编译 1.1 Linphone 在arm 上的编译环境说明 Linphone 在arm 上编译的时候,时常会碰到一些问题,有时候想办法解决了相关的问题,但编译出来的Linphone 在板子上的运行仍然不稳定,或者不能通话。 如果条件允许的话,当碰到这些问题之后,可以换其它的工具链进行编译。我最初编译Linphone 的时候采用的是xscale270 板子自带的工具链,GCC3.4.3 以及uclibc。经过很痛苦 的一番折腾之后,所以的代码最终都编译通过,但是编译出来的linphonec 在板子上运行在通话开始之后总是崩溃。通过GDB 调试,发现是多线程的问题引起的,于是编译了一个线程结构相当的程序,但是测试没有发现问题。 最后,我改用GCC4.0.0 以及Glibc-2.3.5 基本上没有碰到什么问题,直接编译通过,并 且在板子上正常运行。 1.2 Linphone 依赖的库 除了上面所提到的Gcc,Glibc 以及系统的基本库外我主要编译了下面的程序包。 序号库名称说明 1 ReadLine 一个终端显示库,Linphone 会用到它时里面的事件循环机制来读取会话事件。 2 ffmpeg 音视频编解码库 3 Speex 专为通话过程设计的音频编码库 4 libtheora 视频压缩编码库 5 libfaac mpeg4 的音频编码器 6 libfaad2 AAC 音频解码器

ARM视频监控系统投标书

海思工作室 杭州汇文教育咨询有限公司 ——ARM监控系统投标书 海思工作室

目录 一、公司介绍及优势 (2) 1.1公司简介 (2) 1.2系统定位和意义 (2) 1.3公司在本项目中的优势 (3) 二、项目技术方案 (3) 2.1系统框架 (3) 2.2项目目标 (4) 2.3技术路线 (4) 2.3.1 构建基于S3C2440的Linux平台 (4) 2.3.2 视频监控终端软件的设计 (5) 2.3.3 视频监控服务器软件的设计 (6) 2.4使用与维护 (8) 2.4.1 维护简介 (8) 2.4.2 承诺与服务 (9) 三、项目管理及实施计划 (10) 3.1实施计划 (10) 3.2项目管理方案 (10) 3.2.1 整体管理 (10) 3.2.2 会议制度 (11) 3.2.3 临时工作调配 (12) 3.3质量控制管理 (12) 3.3.1 质量基本规划 (12) 3.3.2 质量保证 (12) 3.3.3 质量检查 (13) 3.3.4 风险控制 (13) 四、资源列表及项目报价 (13) 4.1所需资源列表 (13) 4.1.1 硬件资源 (13) 4.1.2 软件资源 (14) 4.1.3 人力资源 (14) 4.2项目报价 (14)

ARM嵌入式视频监控系统投标书首先,感谢杭州汇文教育咨询有限公司的关注,以及提供我们参与此次项目的机会,让我们工作室的学员们能够更好地积累实战经验,为踏上社会之路做充分的准备。冀望于此次接触机会及交流过程,能够成为中国计量学院和杭州汇文教育咨询有限公司打开双方合作之门的良好基石。 在调查和理解ARM视频监控系统的目标,以及对视频监控系统相关背景分析的基础上,我们撰写本文。旨在向杭州汇文教育咨询有限公司介绍我们对此项目的思路及相关建议,且展示海思工作室在此次项目上的计划与执行能力。 一、公司介绍及优势 1.1 公司简介 海思工作室(HSS)于2010年3月12日于成立于中国计量学院,本着“happy 快乐、strive奋斗、solidarity团结”的宗旨,致力于嵌入式软件项目开发和制作。目前公司有12名优秀成员。 虽然,本公司成立时间不长,但是公司成员从大一开始就已经学习掌握C语言知识,距今已近三年,因此底蕴深厚,对于C语言和嵌入式也是非常了解。部分成员在校期间曾获多次奖学金和各类奖项。我们竭尽所能把一切资源投在产品开发上,力求高效、质优、价廉、款佳。傲视同仁,迎合市场所需,满足客户所求。锐意进取,精益求精。面对任何机遇与挑战,我们正以饱满的热情,坚定不移的信心,在嵌入式的道路上阔步前进。未来的日子里,我们将继续以最实惠的价格,最优质的产品、最完善的服务,回报新老客户。以一流的人才,一流的管理,一流的的服务,立足中国,面向世界,与您携手并肩,共创美好的明天。 1.2 系统定位和意义 图像与视频监控系统是应用计算机与通讯技术实现对目标区域信息监控的系统,常用于交通,能源,公安,电信,军事等部门。随着计算机技术及网络技术的迅猛发展,视频监控系统的发展趋势必然是全面数字化、网络化,即采用嵌入式网络摄像机,利用网络进行传输,利用嵌入式监控设备体积小巧、性能稳定、

语音模块使用说明(tmp)

语音模块使用说明 一、软件包 gsm-1.0-pl12 GSM编解码库 alsa-lib-1.0.14 ALSA用户层控制函数库,内核语音模块需要支持ALSA alsa-utils-1.0.14 ALSA工具集,依赖于alsa-lib,该工具集提供amixer进行音量调节 libogg-1.1.4 通用开源语音编解码库 speex-1..2rc1 SPEEX开源语音编码协议库,编译linphone需要该库 live555-20100409 livemedia 多媒体支持库,vlc需要该库支持语音多播功能 ffmpeg-0.5 多媒体编码支持库,支持多种格式语音、视频编解码,本项目中使用到该库的a-law, u-law 语音编解码用于语音多播功能 libosip2-3.3.0 SIP协议库 libeXosip2-3.3.0 基于libosip2的SIP协议扩展库,支持更方便的SIP协议API,编译linphone需要该库 linphone-3.2.1 SIP软件电话,需要语音编解码库libogg,gsm,speex的支持,以及SIP协议库libosip2,libeXosip2的支持 vlc VLC流媒体软件,支持流媒体播放功能,需要语音编解码库ffmpeg,流媒体广播库live555的支持 net-control 网络控制功能软件包,提供与语音控制相关的网络接口

二、语音功能与软件包对照列表 点对点呼叫功能: 该功能使用linphone软件包提供的linphonec配合linphonecsh命令接口实现,默认情况下所有需要支持该功能的终端在启动时自动运行linphonec,需要呼叫时由网络模块调用linphonecsh命令接口控制linphonec完成相关功能。 点对多点广播功能: 该功能使用vlc软件包提供的vlc完成,默认情况下vlc不运行,在需要进行网络广播时,由网络控制模块调用vlc加入指定的多播组实现语音广播功能,广播完成后网络控制模块终止vlc的运行。 三、语音模块软件包的编译 前置条件: 安装交叉编译工具链 设置编译环境: 根据编译主机目录环境及交叉编译工具链的安装路径,设定sip-phone/目录下的env.sh.sample中的参数,设置完成后使用 $source ./env.sh.sample 导入编译设定参数 开始编译: 完成编译环境的设置后,运行自动编译脚本 $./make_world.sh 将自动编译生成根文件系统 四、编译环境各目录及文件说明 packages/目录中存放语音模块相关软件包的源代码 skeleton/目录中存放参考根文件系统的目录结构框架及基本配置文件 tools/目录中存放编译各软件包以及生成根文件系统的脚本 env.sh.example参考的编译环境设置文件

Opencv 交叉编译

目录 1所需要的库及其依赖关系3 2准备工作3 3各个平台配置4 3.1安装设置 (4) 3.1.1armv7-linux平台 (4) 3.1.2aarch64-linux平台 (4) 3.1.3armv7-android平台 (4) 3.1.4aarch64-android平台 (5) 3.2zlib安装 (5) 3.2.1armv7-linux平台 (5) 3.2.2aarch64-linux平台 (5) 3.2.3armv7-android平台 (6) 3.2.4aarch64-android平台 (6) 3.3libpng安装 (6) 3.3.1armv7-linux平台 (6) 3.3.2aarch64-linux平台 (7) 3.3.3armv7-android平台 (7) 3.3.4aarch64-android平台 (7) 3.4libjpeg安装 (8) 3.4.1armv7-linux平台 (8) 3.4.2aarch64-linux平台 (8) 3.4.3armv7-android平台 (8) 3.4.4aarch64-android平台 (9) 3.5yasm安装 (9) 3.5.1armv7-linux平台 (9)

3.5.2aarch64-linux平台 (9) 3.5.3armv7-android平台 (10) 3.5.4aarch64-android平台 (10) 3.6x264安装 (10) 3.6.1armv7-linux平台 (10) 3.6.2aarch64-linux平台 (11) 3.6.3armv7-android平台 (11) 3.6.4aarch64-android平台 (12) 3.7libv4l安装 (12) 3.7.1armv7-linux平台 (12) 3.8xvid安装 (12) 3.8.1armv7-linux平台 (12) 3.8.2aarch64-linux平台 (13) 3.8.3armv7-android平台 (13) 3.8.4aarch64-android平台 (13) 3.9ffmpeg安装 (13) 3.9.1armv7-linux平台 (13) 3.9.2aarch64-linux平台 (14) 3.9.3armv7-android平台 (15) 3.9.4aarch64-android平台 (15) 3.10opencv安装 (16) 3.10.1armv7-linux平台 (16) 3.10.2aarch64-linux平台 (16) 3.10.3armv7-android平台 (17) 3.10.4aarch64-android平台 (18)

windows下使用MinGW+msys编译ffmpeg

C++:windows下使用MinGW+msys编译ffmpeg FFmpeg是在Linux平台下开发的,但它同样也可以在其它操作系统环境中编译运行,本文介绍的就是在windowsXP下编译FFmpeg。 一准备环境: 1 下载mingw 和MSYS 去https://www.sodocs.net/doc/0e4072746.html,/projects/mingw/ 下载 A 点击“DownLoad mingw-get-inst-...exe”; B 切换到页面:download? Check your browser's security bar, or try a direct link, or try another mirror. ; C 点击“direct link”下载类似:mingw-get-inst-20110802.exe 的文件。 提示:msys此处就不用下载了,mingw-get-inst-20110802.exe 中已经包含了msys1.0,后面安装的时候就可以看到该选项。 2 下载yasm ffmpeg编译里面的汇编代码需要yasm.exe 去官网:https://www.sodocs.net/doc/0e4072746.html,/Download.html 下载 直接下载:Win32 .exe (for general use on 32-bit Windows) 文件名为:yasm-1.1.0-win32.exe 3 下载ffmpeg ffmpeg可以到https://www.sodocs.net/doc/0e4072746.html,/releases/ 下载 本人选择的是最新版本:ffmpeg-0.8.5.tar.gz 文件名为:ffmpeg-0.8.5.tar.gz 4 下载SDL SDL下载可以到:https://www.sodocs.net/doc/0e4072746.html,/download-1.2.php 选择:SDL-1.2.14.tar.gz - GPG signed 此版本需要自己编译,后面会解释为什么下载该版本,而不下载编译好的 SDL-devel-1.2.14-mingw32.tar.gz (Mingw32) 5 下载pthreadGC2.dll pthreadgc2.dll是功能强大的处理数字化影视作品编辑软件premiere6运行所需

Android 音视频编解码

Android 音视频编解码 ubuntu下ndk编译ffmpeg0.8.1 ffmpeg最新版本有些问题,比如jni/liblibavcodec/ac3enc_combined.c在最新的版本中已经没有了,但是又多了一个ac3enc_template.c的文件。虽然更新版本对于开发人员可以使用到更多的功能,但是如果这样乱改的话真的好无语,非常讨厌这种更新版本的不一致性,唉,只是抱怨一下 我使用的还是稍微老一点的版本ffmpeg 0.8.1的,至少老的版本能搜到更多的资料,也比较稳定。 ffmpeg版本:ffmpeg 0.8.1(最新版本是0.10,但是有很多问题) NDK版本:ndk r6(ndk r7编译的话会出现各种错误) 机器:32位 系统:ubuntu 注意:ndk r6+ffmpeg0.8.1+Android.mk+config.sh是经过测试过的,可以生成。如果你用的其他版本的 会出现各种问题 前提:需要你配置好NDK的环境,还是说说吧 一、下载并配置NDK环境变量(ubuntu下,windows下请使用cygwin) 1、到https://www.sodocs.net/doc/0e4072746.html,/sdk/ndk/index.html下载NDK 这里,ndk r6版本的下载地址是: https://www.sodocs.net/doc/0e4072746.html,/android/ndk/android-ndk-r6-linux-x86.tar.bz2 2、解压包到/home/loulijun/android/目录下 3、$vim ~/.bashrc 在里面添加如下信息 export NDK=/home/loulijun/android/android-ndk-r6107 export PATH=${PATH}:$NDK 4、$source ~/.bashrc 使其生效 注意:最新r7版本出现了一个关于awk问题,这个awk是64位的,所以如果你是32位机会遇到,具体解决办法见我的上篇博客: https://www.sodocs.net/doc/0e4072746.html,/loulijun/archive/2012/02/26/2368787.html

ffmpeg、jrtp、SDL的交叉编译

ffmpeg、jrtp、SDL的交叉编译 https://www.sodocs.net/doc/0e4072746.html,/weili8607/blog/item/b8c30a3c1ad80308baa16777.html 2009-05-26 10:33 因为需要,重新使用最新的交叉编译器arm-linux-gcc 4.3.2编译了所需要的SDL、ffmpeg、rtp库。其他交叉编译器过程类似,可能遇到不同的问题,视情况解决。 一、SDL的编译 SDL-1.2.13。 ./configure --prefix=/weili/SDL --disable-video-qtopia --disable-video-dummy --disable-video-fbcon --disable-video-dga --disable-arts --disable-esd --disable-alsa --disable-cdrom --disable-video-x11 --disable-nasm --target=arm-linux --host=arm-linux --enable-video-fbcon make make install 看情况改变prefix目录和各种选项。make install之后便在prefix目录下生成所需的动态库和include头文件等等。 二、jrtp的编译 编译rtp库要先编译jthread库,然后在编译jrtp库。我使用的是jthread-1.2.1.tar.gz jrtplib-3.7.1.tar.gz。 1. 进入jthread-1. 2.1 ./configure -host=arm-linux -prefix=/weili/jthread/ make make install 这样jthread库就安装在了/weili/jthread/lib下面了 libjthread.so 2.进入jrtplib- 3.7.1 ./configure --host=arm-linux -prefix=/weili/jrtp/

Android自定义so文件调用ffmpeg.so详解

Android自定义so文件调用ffmpeg.so详解 在使用一下介绍内容时候,我认为所有读者都已具备一下水平: 1、会建立android项目工程 2、了解NDK编程入门知识 3、已成功编译或在网上已下载到ffmpeg.so动态库文件 我自己成功编译ffmpeg.so文件:使用vitamio提供的.sh脚本文件在linux环境下编译的,编译过程此处略去一万字… 1、在NDK的samples下建立android工程,此处我建立的是HelloFFmpeg,如下图: 2、编写本地函数声明,NDK的samples目录下有一个hello-jni的例子:

使用UltraEdit打开HelloJni.java文件: 将该文件的的一下内容拷贝到HelloFFmpeg工程的MainActivity.java的相应位置:(1)、拷贝onCreate中的内容:

(2)、拷贝本地函数声明: (3)、拷贝库文件加载: 打开拷贝完成的HelloFFmpeg工程下的MainActivity.java文件,如下:

新建立jni目录: 在jni目录下建立再建立jni目录

这里通过cmd进入第二个jni目录: 输入以下内容生成.h头文件:

此时会报错,因为咱们的本地函数和本地库的引用均在主类MainActivity中声明引用的,一般重新创建一个类进行声明引用的时候是不会出错的。但此时我给大家提供一个解决该错误的方法: 进入src目录中,使用下面的语句: 其中: -d:代表.h所在的目录,如果目录不存在,则自动创建一个 ../jni/jni:代表上级目录中的jni目录,.h文件将存放在此处

ffmpeg移植Android方法以及常见问题汇总

ffmpeg移植Android方法以及常见问题汇总: 1.在ffmpeg官网下载源码包,比如ffmpeg- 2.3。在ffmpeg目录下增加Android.mk 和av. mk config.sh三个文件。 2.config.sh用于配置ffmpeg环境脚本,可键入 #!/bin/sh PREBUILT=...android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/lin ux-x86 PLATFORM=...android-ndk-r7b/platforms/android-14/arch-arm export TMPDIR=.../ tmp ./configure --target-os=linux \ --arch=arm \ --enable-cross-compile \ --cc=$PREBUILT/bin/arm-linux-androideabi-gcc-4.4.3 \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --extra-cflags="-fPIC -DANDROID" \ --enable-static \ --disable-shared \ --disable-asm \ --disable-yasm \ --extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_li nux_eabi.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PRE BUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtbegin.o $PREBUILT/lib/gcc/arm-linu x-androideabi/4.4.3/crtend.o -lc -lm -ldl" PREBUILT、PLATFORM、TMPDIR是需要修改的,配置自己的ndk路径,通常这一步出错概率极高。TMPDIR路径一定要存在且可以访问。 常见错误: arm-linux-androideabi-gcc is unable to create an executable file,一般是tmp文件没有设置。 Unknown C compiler /toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin / arm-linux-androideabi-gcc,一般是NDK配置错误。 ./config.sh: line 8: --arch: command not found,./configure每一个参数后的转行符号\,注意后面不要有空格符,另外也有可能是字符格式错误,要转为unix,在vim里 :se t ff=unix保存退出。 --cc、--cross-prefix、--nm、--extra-ldflags注意配置路径要正确,否则脚本执行失败。

人脸识别操作步骤

人脸识别 1.OpenCV OpenCV(Open Source Computer Vision) 是英特尔公司制造的强大的视频处理库。目前,2.0 版本问世,利用 C 和C++ 语言创建,在 Linux,Windows,Mac OS X 等中运行。此外,OpenCV 是将重点放在实时图像处理上的库,通过函数实现了从初始视频处理到高水准的视频处理大量算法。 包含Binarization,Noise,Motion Detect,Edge Detect,Pattern Recognition,Hidden Markov Model 等,作为开放源码,只要少量符合,自身的算法也可以注册到库中。 在本次OpenCV 实习中,移植OpenCV-1.0.0 版本并创建HBE-EMPOSIII-SV210 设备的CIS Camera 视频的人脸识别程序。 实习环境 ?Host PC Linux : Ubuntu-8.04 交叉编译器: gcc 4.4.1 ?目标板(HBE-EMPOSIII-SV210) 引导加载程序: U-Boot 1.3.4 Linux 内核: linux-2.6.32-hanback 根文件系统: glibc-2.10.1,BusyBox v1.9.1 等 ?OpenCV 版本: 1.0.0 ?参考资料 OpenCV KOREA https://www.sodocs.net/doc/0e4072746.html,/opencv.cafe 利用OpenCV 的计算机视觉实用编程 1.1OpenCV 移植 首先,为了OpenCV 1.0.0 移植下载源码。在OpenCV Release 网站上进行下载或者也可以复制使用提供CD 的源码。 最新OpenCV 被Release 的地方 https://www.sodocs.net/doc/0e4072746.html,/projects/opencvlibrary/files/ 提供CD 中OpenCV 位置

ffmpeg开发指南(经典)

ffmpeg开发指南(使用 libavformat 和 libavcodec) Ffmpeg 中的Libavformat和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。 这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8 版本的ffmpeg库中的 libavformat/libavcodec 的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。 在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。 或许您会觉得奇怪,为什么需要两个库文件 libavformat 和 libavcodec :许多视频文件格式(AVI就是一个最好的例子)实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解码器。所以, libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。 1打开视频文件: 首先第一件事情--让我们来看看怎样打开一个视频文件并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec: av_register_all(); 这一步注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。要注意你只需调用一次 av_register_all(),所以,尽可能的在你的初始代码中使用它。如果你愿意,你可以仅仅注册个人的文件格式和编码,不过,通常你不得不这么做却没有什么原因。 2下一步,打开文件: AVFormatContext *pFormatCtx; const char *filename="myvideo.mpg"; // 打开视频文件 if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) handle_error(); // 不能打开此文件

ffmpeg绝对编译指南

编译集成ffmpeg指南 ###环境配置(centos/msys2) yum install autoconf automake cmake freetype-devel openssl-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel ###参考地址 https://www.sodocs.net/doc/0e4072746.html,/uid-23069658-id-4018842.html https://www.sodocs.net/doc/0e4072746.html,/wanglx_/article/details/50786307 ###2.1 Yasm(git clone --depth 1 git://https://www.sodocs.net/doc/0e4072746.html,/yasm/yasm.git) 汇编器,编译x264,ffmpeg会用到 autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install make distclean ###libx264 (git clone --depth 1 git://https://www.sodocs.net/doc/0e4072746.html,/x264) H264编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx264 ./configure --prefix="$HOME/ffmpeg_build" --enable-static --enable-shared make make install make distclean ###初始pkgconfig(必须) export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ###libx265(hg clone https://https://www.sodocs.net/doc/0e4072746.html,/multicoreware/x265) H265编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx265 cd 到/x265/build/msys目录下执行对应.sh文件,稍后在cmake弹框中编辑安装目录 make make install ###libfdk_aac(git clone --depth 1 git://https://www.sodocs.net/doc/0e4072746.html,/p/opencore-amr/fdk-aac) AAC编码库,开启需要在FFmpeg的configure中指定:--enable-libfdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --enable-shared --enable-static SPEEXDSP_CFLAGS="$HOME/ffmpeg_build/include" SPEEXDSP_LIBS="$HOME/ffmpeg_build/lib" OGG_CFLAGS="$HOME/ffmpeg_build/include" OGG_LIBS="$HOME/ffmpeg_build/lib" make make install make distclean

相关主题