Linux环境下ffmpeg的配置步骤以及简单的使用命令

资源链接:http://download.csdn.NET/detail/hlj_include/9599667


第一步:建议安装目录:usr/local/目录下

lame-3.99.5.tar.gz
(1)、tar -zxvf lame-3.99.5.tar.gz

(2)、cd lame-3.99.5 

(3)、./configure

(4)、make
(5)、make install


第二步:libogg-1.3.1.tar.gz
解压安装同第一步的1~4小步


第三步:libvorbis-1.3.3.tar.gz
解压安装同第一步的1~4小步


第四步:xvidcore-1.3.2.tar.gz
解压安装同第一步的1~4小步


第五步:latest_x264.tar.bz2 
(1)、tar -jxvf latest_x264.tar.bz2
(2)、./configure
(3)、make
(4)、make install


第六步:libdca-0.0.5.tar.bz2
解压安装同第五步的1~4小步


第七步:a52dec-0.7.4.tar.gz  
解压安装同第一步的1~4小步


第八步:faad2-2.7.tar.gz
解压安装同第一步的1~4小步


第九步:faac-1.28.tar.gz
解压安装同第一步的1~4小步


第十步:amrnb-10.0.0.0.tar.bz2
解压安装同第五步的1~4小步


第十一步:amrwb-7.0.0.1.tar.bz2
解压安装同第五步的1~4小步


第十二步:最关键的一步,安装ffmepg
(1)、./configure --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --  enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
(2)、make
  (3)、make install


如果在./configure的时候会报错, 提示说没有libopencore-amrnb和libopencore-amrwb两个库.使用如下命令安装它们:
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev


如果./configure的时候加入 --enable-shared, 编译安装没有问题. 但是运行ffmpeg命令就会出错:
relocation error: /usr/local/lib/libavfilter.so.3: symbol sws_get_class, version LIBSWSCALE_2 not defined in file libswscale.so.2 with link time reference;



最后阶段:变异编译运行ffmepg:如果显示为下面所示即为安装成功:版本检测指令:ffmprg -version
                                                   
ffmpeg version 0.8.17-4:0.8.17-0ubuntu0.12.04.2, Copyright (c) 2000-2014 the Libav developers
  built on Apr  1 2016 14:24:20 with gcc 4.6.3
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
ffmpeg 0.8.17-4:0.8.17-0ubuntu0.12.04.2
libavutil    51. 22. 3 / 51. 22. 3
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0






ffmpeg的基本操作指令:
格式转换 (将file.avi 转换成output.flv)
#ffmpeg -i file.avi output.flv  
 
-i 表示输入文件


:现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi 
两个命令(file.avi 是中间文件,用完可删)
C代码  收藏代码
#ffmpeg -i video.avi -vcodec copy -an video2.avi    
#ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi  
 
-i 表示输入文件 
-vcodec copy 表示 force video codec (‘copy’ to copy stream) 这个不知怎么译 ,估计是直接copy 
-acodec copy 这个说的应该是音频了 跟上面一样 
-an:表示 disable audio 估计是audio no 之类的缩写,表示去掉video.avi 原有的音频
 
方法2 好像可以直接指定两个输入文件 ,
C代码  收藏代码
#ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi  
 
两个文件的顺序很重要
 
从视频里提取声音(声音与视频的分离)
C代码  收藏代码
#ffmpeg -i 人生若只如初见.flv -vnr.mp3  
 
从flv 文件中提取声音并保存为mp3格式
-vn : 表示忽略视频 估计是video no 之类的缩写
 
#ffmpeg -i 人生若只如初见.flv -an r.flv
 
只留视频不留声音 
-an : 表示 忽略 声音 估计是audio no 之类的缩写
 
从视频里提取图片( )
C代码  收藏代码
#ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg     
-ss  
 
第8秒处截一图


压缩mp3 文件 
如果你觉得mp3文件有点大,想变小一点那么可以通过-ab 选项改变音频的比特率 (bitrate)
C代码  收藏代码
#ffmpeg -i input.mp3 -ab 128 output.mp3  
 
//这里将比特率设为128
你可以用file 命令查看一下源文件 的信息 
z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo 
其中的192 kbps 就是这个东西
 
mp3中比特率的含义是:在压缩音频文件至mp3时,由压缩软件所确定数码文件在播放时每秒传 送给播放器大小,其单位是:千位/秒;英文的含义是:kbps – = kilobits per second。现在mp3文件的最高数位率是320 kbps。这样的文件体积很大,每分钟的音乐超过两兆字节。如果采用可变比特率(VBR)编码来生成mp3文件,获得与320 kbps相当音质,文件的体积会缩小25~50%。请注意:播放时间相同,而歌曲不同,所获的压缩mp3文件的一般不相同,这是因为VBR编码所生成的 mp3文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。
 
录音(要有可用的麦克风,并且如果用alsa 的话,好像得安alsa-oss,重启)
C代码  收藏代码
#ffmpeg -f oss -i /dev/dsp out.avi  
#ffmpeg -f alsa -ac 2 -i hw:0,0 ut.avi  
#ffmpeg -f alsa -ac 2 -i pulse  
 
oss 是linux 下的声音相关的东西,与alsa 一样,不过oss 是商业的, 而/dev/dsp 是oss 用到的麦克的设备吧,可以这样理解
 
屏幕录像
C代码  收藏代码
#ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi   
#ffmpeg -f x11grab -s 320x240  -r 10 -i :0.0+100+200 wheer.avi  
 
:0:0 表示屏幕(个人理解,因为系统变量$DISPLAY值就是:0.0) 而100,表示距左端100象素,200表示距上端200
-s 设置窗口大小 
-r 10 好像是设置频率,不懂
C代码  收藏代码
#ffmpeg -f x11grab -s xga-qscale 5-r 10 -i :0.0+0+0 wheer.avi  
 
-qscale 8 设定画面质量,值越小越好
 
屏幕录像,同时录音
C代码  收藏代码
#ffmpeg -f oss -i /dev/dsp-f x11grab -r 30 -s 1024x768 -i :0.0  output.mkv  
#ffmpeg -ac 2 -f oss -i /dev/dsp -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv  
 
看到这,你会发现这个命令有多强大, 
如果我屏幕上打开了一个窗口,我只想录这个窗口的内容,如何确定这个窗口的坐标位置呢 
可以用另外一个命令 
xwininfo 输入这个命令后,用鼠标点选目标窗口, 
会出现目标窗口的坐标,宽高等一系列信息 
Absolute upper-left X: 276 
Absolute upper-left Y: 57 
Relative upper-left X: 2 
Relative upper-left Y: 23 
Width: 742 
Height: 499 
Depth: 24 
Visual: 0×21 
Visual Class: TrueColor 
Border width: 0 
Class: InputOutput 
Colormap: 0×20 (installed) 
Bit Gravity State: NorthWestGravity 
Window Gravity State: NorthWestGravity 
Backing Store State: NotUseful 
Save Under State: no 
Map State: IsViewable 
Override Redirect State: no 
Corners: +276+57 -262+57 -262-244 +276-244 
-geometry 80×24+274+34 看到这一行了没 ()
比如根据上面的信息
#ffmpeg -f oss -i /dev/dsp -f x11grab -r 30  -s 1280x752 -i :0.0+0+23  output.avi
 
Another thing you can change is the video frame rate (FPS). In the example above we used -r 30 which means capture at 30 FPS. You can change this value to whatever frame rate you want. 
这个 -r 30 应该是每秒钟取样几次,估计是一秒截三十次屏,
切头去尾
C代码  收藏代码
#ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3 output.mp3  
 
只要从第10秒开始截取,共截取1:22时长的内容,视频文件的连接,如两个flv 文件 连接成一块 
好像必须先将文件 转成mpg ,dv 等格式的文件后才能进行连接 
连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PS, DV格式亦可连接))
 
C代码  收藏代码
#ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20  
#ffmpeg -i input2.avi -sameq inputfile_02.mpg -r 20  
#cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg  
#ffmpeg -i inputfile_all.mpg -sameq outputfile.avi  
 
上面将input1.avi input2.avi 合并成outputfile.avi 
-sameq 表示 相同的质量(可能指的是画面,不太清楚) 
-r 指频率 
=====================================================================
下面是wiki 上给的几个例子
 
参数
FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用 ffmpeg -h 显示;编解码器名称等明细可用 ffmpeg -formats 显示。
下列为较常使用的参数。
 
主要参数
-i 设定输入档名。 
-f 设定输出格式。 
-y 若输出档案已存在时则覆盖档案。 
-fs 超过指定的档案大小时则结束转换。 
-ss 从指定时间开始转换。 
-title 设定标题。 
-timestamp 设定时间戳。 
-vsync 增减Frame使影音同步。
 
影像参数
-b 设定影像流量,默认为200Kbit/秒。( 单位请参照下方注意事项 ) 
-r 设定FrameRate值,默认为25。 
-s 设定画面的宽与高。 
-aspect 设定画面的比例。 
-vn 不处理影像,于仅针对声音做处理时使用。 
-vcodec 设定影像影像编解码器,未设定时则使用与输入档案相同之编解码器。
 
声音参数
-ab 设定每Channel (最近的SVN 版为所有Channel的总合)的流量。( 单位 请参照下方注意事项 ) 
-ar 设定采样率。 
-ac 设定声音的Channel数。 
-acodec 设定声音编解码器,未设定时与影像相同,使用与输入档案相同之编解码器。 
-an 不处理声音,于仅针对影像做处理时使用。 
-vol 设定音量大小,256为标准音量。(要设定成两倍音量时则输入512,依此类推。)
 
注意事项
以-b及ab参数设定流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。)
例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入‘ -ab 64k ’;单位为kbits/sec的情况时则需输入‘ -ab 64 ’。
以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac 与 libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats 确 认输入的编解码器是否能运作。
 
范例
将MPEG-1影片转换成MPEG-4格式之范例
C代码  收藏代码
#ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4  
 
将MP3声音转换成MPEG-4格式之范例
C代码  收藏代码
#ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4  
 
将DVD的VOB档转换成VideoCD格式的MPEG-1档之范例
C代码  收藏代码
#ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg  
 
将AVI影片转换成H.264格式的M4V档之范例
C代码  收藏代码
#ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v  
 
将任何影片转换成东芝REGZA可辨识的MPEG2格式之范例
C代码  收藏代码
#ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg  
 
连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PSDV格式亦可连接)、
C代码  收藏代码
#ffmpeg -i input1.avi -sameq inputfile_01.mpg  
#ffmpeg -i input2.avi -sameq inputfile_02.mpg  
#cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg  
#ffmpeg -i inputfile_all.mpg -sameq outputfile.avi  
=============================================================================
http://ffmpeg.org/ffmpeg-doc.html
http://ubuntuforums.org/showthread.php?t=1392026
 
同时搞明白的一些问题 
在alsa 体系中声卡(也可能是麦克风,)叫hw:0,0 而在oss 体系中叫/dev/dsp (用词可能不太专业) Linux在安装了声卡后,会有一些设备文件生成。


采集数字样本的/dev/dsp文件,针对混音器的/dev/mixer文件,用于音序器的/dev/sequencer,/dev/audio文件一个 基于兼容性考虑的声音设备文件。只要向/dev/audio中输入wav文件就能发出声音。而对/dev/dsp文件读取就能得到WAV文件格式的声音文 件。
 
原文:http://www.tuicool.com/articles/FNVJ3a
 
 用ffmpeg将rmvb压制成mp4
 
1、查看rmvb属性


转换之前先查看一下文件属性,将分辨率等信息看一下,如果分辨率超过960*640就需要调整。顺便看一下码率,压制成x264的时候参考一下。
C代码  收藏代码
ffmpeg -i 文件名  
2、压制成mp4


1.pass1编码
C代码  收藏代码
ffmpeg -i 01.rmvb -an -vcodec libx264 -b 560k -pass 1 -f mp4 -y NUL   
-an : 不编码音频
-vcodec : 设置视频的编码,我这里使用的是x264
-b : 这个是码率
-f : 强制使用格式
-y : 自动输y确认
NUL : 因为是pass1 所以不需要输出文件,直接用NUL
2.pass2编码
C代码  收藏代码
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -pass 2 -f mp4 01.mp4   
因为现在很多rmvb的音频部分都是aac编码的,所以可以直接用-acodec copy复制音频部份
3、针对某些文件的参数调整


有些rmvb或着mkv之类的分辨率比较高,所以传到itouch需要调整一下。在ffmpeg里面可以用-s参数:
C代码  收藏代码
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -s 960x640 -f mp4 01.mp4  
960x640需要自己计算一下,按比例进行调整
按时间截取:
C代码  收藏代码
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -ss 00:00:00 -t 00:01:00 -f mp4 01.mp4  
设置B-frame对动画片有些好处,2pass的时候不是很明显,1pass的比较明显:
C代码  收藏代码
ffmpeg -i 01.rmvb -acodec copy -vcodec libx264 -b 560k -bf 6 -f mp4 01.mp4  
 

你可能感兴趣的:(H264编码)