ffmpeg常用命令
一、ffmpeg语法
ffmpeg使用语法:
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
如果没有输入文件,那么视音频捕捉就会起作用。
常用选项:
-h 帮助
-h full 帮助,包括全部设置参数的说明
-i filename 输入文件
-y 覆盖输出文件
-vcodec 指定视频编码器,如libx264。copy为复制不编码
-acodec 指定音频编码器,如libfaac。copy为复制不编码
-vf 使用视频filter
-af 使用音频filter
二、常用范例
1、直接转封装,不编码:
ffmpeg -i inputfile -vcodec copy -acodec copy outputfile
2、转码并重新封装
ffmpeg -y -i input.avi input -acodec libfaac -ab 128000 -vcodec mpeg4 -b 120000 -s 320x180 final_video.mp4
opus只能是foobar能播放opus的格式:【mp4、avi、mp3无opus标识,ts无法播放】
ffmpeg -i d:\test001.mp4 -vcodec libx264 -b 200000 -r 30 -acodec libopus -ab 16000 d:\test001.ogg
ffmpeg -i d:\test.mp3 -acodec libopus -ab 16000 d:\test.ogg
ffmpeg -i F:\media\yuv_files\soccer_4cif.y4m -vcodec libx264 -b 200000 -r 60 d:\soccer_4cif00.flv
failed:
ffmpeg -i d:\704x576.yuv -vcodec libx264 -s 704x576 -r 60 -pix_fmt yuv420p d:\out.h264
ffmpeg -i input.avi -target vcd /tmp/vcd.mpg
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 。
ffmpeg -i aaa.mkv -vcodec copy -acodec copy -bsf h264_mp4toannexb -muxrate 4500k aaa.ts
-bsf 指定bit stream filter。
h264_mp4toannexb:对于某些封装格式(例如MP4/FLV/MKV等)中的H.264,需要用到此名称的bitstream filter。
aac_adtstoasc:对于某些封装格式(例如MP4/FLV/MKV等)中的AAC,需要用到此名称的bitstream filter。
如由mp4转为ts,就需要指定 -bsf h264_mp4toannexb。
3、屏幕录像(linux)
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 test.avi
-vd 指定屏幕设备
-b 设置视频比特率
-s 设置输出帧的大小,用宽x高标识。
-r 设置输出帧率,默认25
-g 设置gop大小,即关键帧间隔
ffmpeg -f x11grab -s xga -r 60 -i :0.0+0+0 -qscale 0.01 out.mkv
-qscale 视频质量。这个值越小,质量越高,0.01
ffmpeg -f x11grab -s 800x600 -r 25 -i :0.0 -f alsa -ac 2 -ar 44100 -i pulse -qscale 0.01 output.mkv
-f x11grab 指定输入设备
-f alsa 指定输入设备,这里是声卡,后面是录制音频参数
windows下:
列出当前系统的设备:
ffmpeg -devices
列出当前系统的dshow设备:
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f dshow -i video="screen-capture-recorder" output.flv
抓屏带声音:
ffmpeg -f dshow -i video="UScreenCapture":audio="Microphone" output.flv
4、摄像头录像
ffmpeg -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf
-i 这里是指定输入设备/dev/video0
-f 是指定muxer,也就是输出的文件容器格式
还可以通过设备名称指定输入设备:
-i video=”video source name”:audio=”audio source name”
5、截取图片
ffmpeg -i d:\test001.MP4 -y -f image2 -ss 3 -s 352x240 -vframes 1 d:\test1.jpg
-f 指定muxer,这里是截图,用image2
-ss 指定第几秒,这里截取第3秒的
-s 设置输出画面的大小,不设置按原画面大小
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg
-r 提取图像的频率,这里是连续截取
6、分割音视频
ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4
-ss 表示分割视频开始时间,时间单位为小时:分:秒,或者按秒0,2300也行
-t 表示从开始分割到分割结束整个分割视频的时间
7、拼接音视频
拼接时,我们需要将需要拼接的视频文件按以下格式保存在一个列表 list.txt 中:
file '/path/file1'
file '/path/file2'
file '/path/file3'
相应的命令为:
ffmpeg -f concat -i list.txt -c copy output.mp4
8、抽取指定音视频
#ffmpeg -i G:\2502.ts
输出:
Input #0, mpegts, from 'G:\2502.ts':
Duration: 00:44:29.76, start: 16082.569089, bitrate: 9670 kb/s
Program 85
Stream #0:0[0x353]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x355]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:2[0x354]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp,192 kb/s
Stream #0:3[0x357](CHI): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
Stream #0:4[0x358](ENG): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
Stream #0:5[0x359](CHS): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
At least one output file must be specified
抽取指定的音视频到输出文件:
#ffmpeg -i G:\2502.ts -map 0:0 -vcodec copy -map 0:2 -acodec copy G:\2502_2.ts
9、音频与一段视频混合
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
ffmpeg -i e:\music01.wav -i F:\media\yuv_files\soccer_4cif.y4m -vcodec libx264 -b 200000 -r 60 -acodec pcm_s16be e:\soccer_music.ts
10、裁剪旋转视频
ffmpeg -i aaa.mp4 -vf crop=iw/2:ih/2,transpose=1 output1.mp4
-vf 使用视频filter。这里用了crop和transpose两个filter,分别来裁剪和旋转。
transpose参数:
0 = 90 CounterCLockwise and Vertical Flip (default)
1 = 90 Clockwise
2 = 90 CounterClockwise
3 = 90 Clockwise and Vertical Flip
ffmpeg -a aaa.mp4 -vf transpose=1 output1.mp4
ffmpeg -a aaa.mp4 -vf transpose=2 output2.mp4
11、转码为cbr
ffmpeg -y -i D:\2012.ts -c:v libx264 -b:v 4200k -bt 200K -minrate 4200k -maxrate 4200k -bufsize 4200k -nal-hrd cbr -c:a copy -f mpegts -muxrate 4200k D:\2012_c.ts
-muxrate 设置mux时的码率,不足则填空包到0x1fff的pid。
11、将一个JPG图片经过h264压缩循环输出为mp4视频
ffmpeg -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4
三、音视频详细参数
A) 视频选项
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WidthXHeight 缺省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
B)高级视频选项
-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 包括了模块名和参数,用空格分开
使用x264时,可以使用-x264opts来重写预设或者使用 libx264的私有选项:
-vcodec libx264 -s 480×272
-x264opts
bitrate=300:profile=baseline:preset=slow
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测试