FFmpeg选项


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

一、主要选项

ffmpeg431  -ss 10  -i ande_302.mp4   -t  00:00:10.345  -vcodec copy/libx264/libxvid  -acodec copy  -f flv  -y  ande_302-testflv.flv


-f: 文件,封装格式

-vcodec/acodec: 音视频编解码格式


1、-f fmt (input/output) 指定输入或者输出文件格式(封装格式,视频容器)。常规可省略而使用依据扩展名(文件的前几百K的内容,智能分析 )的自动指定,但一些选项需要强制明确设定。

2、-i filename (input) 指定输入文件。

3、-y (global) 默认自动覆盖输出文件,而不再询问确认。

4、-n (global) 不覆盖输出文件,如果输出文件已经存在则立即退出。

5、-t duration(input/output) 限制输入/输出的时间。如果是在 -i 前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。 注意 -to 和 -t 是互斥的,-t 有更高优先级。

6、-to position (output) 只写入position时间后就停止,position可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。 注意 -to 和 -t 是互斥的,-t 有更高优先级。

7、-ss position (input/output)

当在 -i 前,表示定位输入文件到position指定的位置。注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位点。position可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。

8、-codec[:stream_specifier] codec (input/output,per-stream) 为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。选项参数中 codec 是编解码器的名字,或者是 copy(仅对输出文件)则意味着流数据直接复制而不再编码。

二、视频选项

1、-vframes number (output) 设置输出文件的帧数,是 -frames:v 的别名。

2、-r[:stream_specifier] fps (input/output,per-stream) 设置帧率(一种Hz值,缩写或者分数值)。

3、-s[:stream_specifier] size (input/output,per-stream) 设置帧的尺寸。

4、-vn (output) 禁止输出视频。N:no

5、-vcodec codec (output) 设置视频编码器,这是 -codec:v 的一个别名。

6、aspect[:stream_specifier] aspect (output,per-stream) 指定视频的纵横比(长宽显示比例)。aspect 是一个浮点数字符串或者num:den格式字符串(其值就是num/den),例如"4:3","16:9","1.3333"以及"1.7777"都是常用参数值。


Ffmpeg431.exe  -encoders

Flv: [sorenson spark(vcodec)  + mp3(acodec)]

ffmpeg431   -i ande_302.mp4   -vcodec libx264 -vframes 90  -f flv   -y   ande_302-testflv.flv

ffmpeg431   -i ande_302.mp4   -vn  -f flv   -y   ande_302-testflv.flv

三、音频选项

1、-aframes number (output) 设置 number 音频帧输出,是 -frames:a 的别名。

2、-ar[:stream_specifier] freq (input/output,per-stream) 设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。

3、-aq q (output) 设置音频品质(编码指定为VBR),它是 -q:a 的别名。

4、-ac[:stream_specifier] channels (input/output,per-stream) 设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。

5、-an (output) 禁止输出音频。

6、-acode codec (input/output) 设置音频解码/编码的编/解码器,是 -codec:a 的别名。


Mp3: libmp3lame

ffmpeg431 -i ande_302.mp4  -vn -aframes 180 -acodec libmp3lame    -ac 2    -ar 48000  -y  ande_302-testmp3.mp3


quality settings (VBR)

-aq 4 = 128 kb/s

-aq 5 = 160 kb/s

-aq 6 = 192 kb/s

-aq 7 = 224 kb/s

-aq 8 = 256 kb/s


四、字幕选项

1、-scodec codec(input/output) 设置字幕解码器,是 -codec:s 的别名。

2、-sn (output) 禁止输出字幕。

3、-fix_sub_duration 修正字幕持续时间。

4、-canvas_size size 设置字幕渲染区域的尺寸(位置)。



ffmpeg431  -i  0.mp4  -vf subtitles=0.srt   -y output.mkv

ffmpeg431 -i 0.mp4  -i 0.srt  -c copy -c:s mov_text  output3.mp4


 

ffmpeg431 -i output3.mp4   -an -vn -scodec srt sub1.srt

ffmpeg431 -i output3.mp4   -an -vn -scodec ass -y  sub1.ass



五、FFmpeg命令示例

参数说明:

命令格式:

    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]

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

    (1) h264: 表示输出的是h264的视频裸流

    (2) mp4: 表示输出的是mp4的视频

    (3)mpegts: 表示ts视频流


主要参数:

-i 设定输入流

-f 设定输出格式

-ss 开始时间


视频参数:

-b 设定视频流量,默认为200Kbit/s

-r 设定帧速率,默认为25

-s 设定画面的宽与高

-aspect 设定画面的比例

-vn 不处理视频

-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝


音频参数:

-ar 设定采样率

-ac 设定声音的Channel数

-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝

-an 不处理音频



FFmpeg命令示例

1、转化格式

ffmpeg -i input_test.mp4 -vn -acodec copy output_test.flv

ffmpeg -i input_test.aac -vn -acodec copy output_test.mp3


2、抽取画面中的音频

ffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.aac

ffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.mp3

ffmpeg -i input_test.mp4 -acodec copy -vn output_test.mp3


3、抽取画面中的视频

ffmpeg -i input_test.mp4 -vcodec copy -an output_test.avi

ffmpeg -i input_test.mp4 -vcodec copy -an output_test.mp4


4、音频+视频合成

ffmpeg -i input_test_1.mp4 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4

ffmpeg -i input_test_1.mp4 -itsoffset 10 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4

ffmpeg -ss 20 -t 5 -i input_test_1.mp4 -i input_test_2.aac -vcodec copy -acodec copy output_test.mp4


音乐持续播放,视频只播放5秒

ffmpeg -ss 20 -t 5 -i input_test_1.mp3 -i input_test_2.mp4 -vcodec copy -acodec copy output_test.mp4

视频持续播放,音乐只播放5秒


5、音频+音频合成

ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=shortest output_test.mp3

ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=longest output_test.mp3

ffmpeg –i input_test_1.mp3 –i input_test_2.mp3 –vcodec copy –acodec copy output_test.mp3

格式:ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT


6、视频分离成图片

ffmpeg -i input_test.mp4 -r 1 -f image2 output_image-%03d.jpeg


7、图片合成视频

ffmpeg -f image2 -i output_image-%03d.jpeg output_test.mp4


8、改变音量大小

ffmpeg -i input_test.mp3 -af 'volume=0.5' output_test.mp3


9、音效淡入淡出效果

ffmpeg -i input_test.mp3 -filter_complex afade=t=in:ss=0:d=4 output_test.mp3

淡入效果:把 input_test.mp3 文件的前5s做一个淡入淡出效果,输出到 output_test.mp3

文件中

ffmpeg -i input_test.mp3 -filter_complex afade=t=out:st=20:d=6 output_test.mp3

淡出效果:将 input_test.mp3 文件从20s开始,做6s的淡出效果,输出到 output_test.mp3 文件中


10、截取音频

ffmpeg -ss 10 -i input_test.mp3 -to 20 -vcodec copy -acodec copy output_test.mp3

ffmpeg -ss 10 -i input_test.mp3 -t 5 -vcodec copy -acodec copy output_test.mp3

ffmpeg -i input_test.mp3 -c copy -t 10 -output_ts_offset 120 output_test.mp3


11、容器时长获取

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i input_test.mp3


12、网络资源下载

ffmpeg -i https://xxx.xxx.xxxxxx -c copy -f mp3 output_test.mp3


11、播放音频视频

ffplay input_test.mp3


12、图片生成gif动图

ffmpeg -i input_image_%03d.png -r 5 output_test.gif


13、抽取PCM数据

ffmpeg -i input_test.mp4 -vn -ar 44100 -ac 2 -f s16le output_test.pcm




六、更多选项


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测试




好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***