ffmpeg命令使用例子收集

转自:http://blog.csdn.net/yypony/article/details/18795931


ffmpeg不常用,命令参数什么的经常忘记,使用--help,打印出来的一堆,有时又没有耐心看. 因此,对我来说,倒是看例子回忆起来快一些.现收集如下:

1.ffmpeg基本用法:
    ffmpeg [input options] -i [input file] [output options] [output file]
input options:输入选项是有关源文件中丢失的一些基本信息,比如图像文件序列中的帧率;或者是对应于流的期望起始位置的seek position
out options:音视频的一些选项filtering(帧率的选择,信道数,帧尺寸frame dimensions,帧率),音视频codec及相关选项,容器格式及相关选项。
例如,用ffmpeg至少要用到以下选项:ffmpeg -i INFILE -acodec ACODEC -ab 96k -vcodec VCODEC -b 500k OUTFILE


2.用ffmpeg编码yuv文件
要注意ffmpeg输入命令的顺序,因为yuv是无格式参数的,故在yuv输入文件之前就需要设置视频的大小。如:ffmpeg -s 1440x1080 -i sample.yuv -vcodec mpeg4 -sameq -aspect 16:9 -b
15000k sample.avi
注意:-s 1400x1080参数一定要在-i sample.yuv的前面,否则会报"Picture size 0x0 is invalid "的错误


3.ffmpeg用libx264编码之──预参数文件:preset files
预参数文件在ffmpeg源代码的ffpresets子目录下找到,使用make install时,它会把这些预参数文件安装到${prefix}/share/ffmpeg目录下。使用-vcodec libx264 -vpre <preset> ,ffmpeg就可以找到这些预参数。否则,或者可以将ffmpeg源代码目录下的*.ffpreset 拷贝到 ~/.ffmpeg/ 或者也可以直接在命令行中用参数-fpre 直接指定一个预参数文件.


4.ffmpeg用libx264采用Two-Pass VBR 的例子:
例1:
    ffmpeg -i INPUT -an -pass 1 -vcodec libx264 -vpre slow_firstpass -b BIT_RATE -bt BIT_RATE -threads 0 OUTPUT.mp4
    注意:第一遍the first pass中不编码音频
    ffmpeg -i INPUT -acodec libfaac -ab 128k -pass 2 -vcodec libx264 -vpre slow -b BIT_RATE -bt BIT_RATE -threads 0 OUTPUT.mp4
例2:
    ffmpeg -i input.avi -pass 1 -vcodec libx264 -vpre fast_firstpass -b 512k -bt 512k -threads 0 -f rawvideo -an -y /dev/null
    ffmpeg -i input.avi -pass 2 -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre fast -b 512k -bt 512k -threads 0 output.mp4
note:For the Two-Pass example the output file should be either NUL on windows or /dev/null on unix / linux boxes. When using this you also need of -f mp4; to specify the container format, as it cant be determined from the output filename, and -y to overwrite as these “files” ( really devices ) already exists. This will prevent the file being written saving on disk IO bandwidth.--(有时输出文件没有用.mp4后缀,而是其他,即使不用 -f mp4参数,貌似编码也能进行,但最终实际输出文件仍然是mp4格式的,含有mp4的文件头,如后缀.h264,未添加-f mp4参数,ffmpeg编码不会报错,可实际输出文件格式还是.mp4的。若后缀为.264,ffmpeg编码报错,这时用-f rawvideo 可最终输出文件格式也是mp4的 )


5.ffmpeg用libx264采用Single-Pass Constant Rate Factor (CRF)编码,mainline级别的例子:
    ffmpeg -i INFILE -acodec libfaac -ab 96k -vcodec libx264 -vpre slow -crf 22 -vpre main -threads 0 OUTPUT.mp4

6.用ffmpeg将yuv文件转264的流:
采用two pass,没用-b或-vb设定码率,则编码时是采用默认码率,好像为200kbps,如果用-b或-vb设定码率时,注意码率数字后面要带上k,即如果需要512k,则写-b 512k,而非有些文档上写的-b 512
    ffmpeg -s 176*144 -i akiyo_qcif.yuv -pass 1 -vcodec libx264 -vpre fast_firstpass -vpre baseline -y akiyo_qcif.h264
    ffmpeg -s 176*144 -i akiyo_qcif.yuv -pass 2 -vcodec libx264 -vpre fast -vpre baseline -y akiyo_qcif.h264


7.ffmpeg将yuv转263:
H.263是不支持320x240的分辨率的,H.263支持5种分辨率,即除了支持H.261中所支持的QCIF和CIF外,还支持SQCIF、4CIF和16CIF,SQCIF相当于QCIF一半的分辨率,而4CIF和16CIF分别为CIF的4倍和16倍。H.263的压缩率可从几十到一百多不等,与参数相关。
命令行例子:
     ffmpeg -i 00.mp4 -vcodec h263 -s 704*576 -y 1.avi
two pass example:使用two pass编码时,对分辨率稍大的视频,不能用默认的码率(好像默认是200kb/s),否则第二遍编码时会认为码率太低,无法编码。
    ffmpeg -s 352x288 -i coastguard_cif.yuv -vcodec h263 -pass 1 -vb 384k -y coastguard_cif_1.h263
    ffmpeg -s 352x288 -i coastguard_cif.yuv -vcodec h263 -pass 2 -vb 384k -y coastguard_cif_2.h263

8.ffmpeg将yuv转mpeg4
生成后缀名为.mpeg4,但是此后缀名ffmpeg不认,拒绝编码,故加-f rawvideo参数:
    ffmpeg -s 1280x720 -i 720p5994_parkrun_ter.yuv -vcodec mpeg4  -vb 2048k -f rawvideo parkrun_ter_720p.mpeg4


9.ffmpeg将yuv转为mpeg2
example1:生成后缀名为.mpeg2,但是此后缀名ffmpeg不认,拒绝编码,故加-f rawvideo参数:
    ffmpeg -s 1920x1080 -i riverbed.yuv -vcodec mpeg2video -f rawvideo riverbed_1080p.mpeg2

10.ffmpeg将yuv转为flv(sorenson spark)
example:
    ffmpeg -s 352x288 -i highway_cif.yuv -vcodec flv  -f rawvideo highway_cif.mpeg4

11.ffmpeg从avi文件中分离截取出其中一段视频,
example1,从其中第100秒开始,抽取10秒长的一段视频,不改变视频的编码格式:其中-ss <int>是从第int秒开始,-t <duration>是表示转码时记录duration秒的视音频
    ffmpeg -i 808\(divx4\).avi -ss 100 -t 10 -vcodec copy -an -f rawvideo 808_divx4_part.mpeg4

12.ffmpeg给一个纯视频流文件如.h264封装到文件容器中,如.mp4,且不改变视频压缩格式,则-vcodec 参数后用copy
example:
    ffmpeg -i stream.h264 -vcodec copy stream_h264_videoonly.mp4

13.ffmpeg将音频aac编码视频x264的mp4文件转为音频AC3的视频x264的mp4文件:
    ./ffmpeg -i S.H.E.mp4 -acodec ac3 -vcodec copy -f mp4 she_ac3.mp4

14.ffplay播放yuv文件命令
ffplay -f rawvideo -video_size 1920x1080 a.yuv

15.ffmpeg截取:-ss参数

-ss的有两种表示:,hh:mm:ss 或 直接写秒数,秒可以带小数点,因此-ss可以精准到毫秒(帧)
ffmpeg是从-ss参数指定的秒数开始往后查找关键帧,然后从关键帧处开始截取。(注意:这是当-ss参数放在-i参数之前时,因为此时-ss属于输入参数,因此会有解码前的seek操作)

如果-ss是放在-i参数之后,则属于输出参数,因此是解码到-ss指定秒数所对应的帧处开始处理.
比如要从视频中截取指定的某一帧,就应当用将-ss放在-i参数之后

16.截取帧:
-vframes (后面跟帧数,表示截取多少帧)

17.从一段视频中截取指定的某一帧,存成图片jpg
计算帧对应的时间,赋给-ss参数,指定要存的帧数为1赋给-vframes参数
example:

从帧率为24fps的视频中抽取第783帧,-ss的值为:783/24=32.625秒,-vframes为1,因为要求是准确的第783帧,因此-ss和-vframes的参数都必须放在-i后面,作为输出参数
ffmpeg -i head.mp4 -ss 32.625 -vframes 1 783.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值