ffmpeg基本命令

来源:互联网 发布:什么是行知教育 编辑:程序博客网 时间:2024/06/16 17:12

1.普通格式转换
ffmpeg -i input.avi output.mp4
从选项指定的任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)读取 -i,并写入任意数量的输出“文件”,由一个简单的输出url。在命令行上发现的任何不能被解释为选项的内容都被认为是输出url。
2. 提取音频

 ffmpeg -i input.mp4 -acodec copy -vn output.aac //上面的命令,默认mp4的audio codec是aac,如果不是,可以都转为最常见的aac。 ffmpeg -i input.mp4 -acodec aac -vn output.aac

3.提取视频

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

4. 视频剪切
下面的命令,可以从时间为00:00:15开始,截取5秒钟的视频。

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 

-ss表示定位到开始切割的时间,,-t表示要切多少。上面就是从15秒开始,切5秒钟出来。
5.码率、帧率和文件大小
概述
码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。

帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。
码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。
帧率
①用 -r 参数设置帧率

ffmpeg –i input –r fps output

②用fps filter设置帧率

ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm

帧率的预定义值:
例如设置码率为29.97fps,下面三种方式具有相同的结果:

ffmpeg -i input.avi -r 29.97 output.mpgffmpeg -i input.avi -r 30000/1001 output.mpgffmpeg -i input.avi -r netsc output.mpg

码率
ffmpg控制码率有3种选择,-minrate -b:v -maxrate
-b:v主要是控制平均码率。
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。

ffmpeg -i input.mp4 -b:v 2000k output.mp4 

上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好)

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

音频:-b:a 视频: - b:v
设置视频码率为1500kbps

ffmpeg -i input.avi -b:v 1500k output.mp4

控制输出文件大小
-fs (file size首字母缩写)

ffmpeg -i input.avi -fs 1024K output.mp4

计算输出文件大小
(视频码率+音频码率) * 时长 /8 = 文件大小K
6.调整视频分辨率
①用-s参数设置视频分辨率,参数值wxh,w宽度单位是像素,h高度单位是像素

ffmpeg -i input_file -s 320x240 output_file

②预定义的视频尺寸
下面两条命令有相同效果

ffmpeg -i input.avi -s 640x480 output.aviffmpeg -i input.avi -s vga output.avi

下表列出了所有的预定义尺寸
这里写图片描述

Scale filter调整分辨率
Scale filter的优点是可以使用一些额外的参数
语法:

Scale=width:height[:interl={1|-1}]

下表列出了常用的额外参数
举例
下面两条命令有相同效果

ffmpeg -i input.mpg -s 320x240 output.mp4 ffmpeg -i input.mpg -vf scale=320:240 output.mp4

对输入视频成比例缩放
改变为源视频一半大小

ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

改变为原视频的90%大小:

ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4

举例
在未知视频的分辨率时,保证调整的分辨率与源视频有相同的横纵比。
宽度固定400,高度成比例:

ffmpeg -i input.avi -vf scale=400:400/affmpeg -i input.avi -vf scale=400:-1

相反地,高度固定300,宽度成比例:

ffmpeg -i input.avi -vf scale=-1:300ffmpeg -i input.avi -vf scale=300*a:300

7.裁剪/填充视频
裁剪视频crop filter
从输入文件中选取你想要的矩形区域到输出文件中,常见用来去视频黑边。
语法:crop:ow[:oh[:x[:y:[:keep_aspect]]]]

举例
裁剪输入视频的左三分之一,中间三分之一,右三分之一:

ffmpeg -i input -vf crop=iw/3:ih :0:0 output ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output

裁剪帧的中心
当我们想裁剪区域在帧的中间时,裁剪filter可以跳过输入x和y值,他们的默认值是
Xdefault = ( input width - output width)/2
Ydefault = ( input height - output height)/2

ffmpeg -i input_file -v crop=w:h output_file

裁剪中间一半区域:

ffmpeg -i input.avi -vf crop=iw/2:ih/2 output.avi

填充视频(pad)
在视频帧上增加一快额外额区域,经常用在播放的时候显示不同的横纵比
语法:pad=width[:height:[:x[:y:[:color]]]]

举例
创建一个30个像素的粉色宽度来包围一个SVGA尺寸的图片:

ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg

860:660为填充之后的尺寸

同理可以制作testsrc视频用30个像素粉色包围视频

ffmpeg  -f lavfi -i testsrc -vf pad=iw+60:ih+60:30:30:pink

4:3到16:9
一些设备只能播放16:9的横纵比,4:3的横纵比必须在水平方向的两边填充成16:9,

高度被保持,宽度等于高度乘以16/9,x(输入文件水平位移)值由表达式(output_width - input_width)/2来计算。

4:3到16:9的通用命令是:

ffmpeg -i input -vf pad=ih*16/9:ih :(ow-iw)/2:0:color output

16:9到4:3
为了用4:3的横纵比来显示16:9的横纵比,填充输入文件的垂直两边,宽度保持不变,高度是宽度的3/4,y值(输入文件的垂直偏移量)是由一个表达式(output_height-input_height)/2计算出来的。

16:9到4:3的通用命令:

ffmpeg -i input -vf pad=iw :iw*3/4:0:(oh-ih)/2:color output

8.翻转和旋转
翻转
水平翻转语法: -vf hflip

ffmpeg -i input -vf hflip output

垂直翻转语法:-vf vflip

ffmpeg -i input -vf vflip   output

旋转
语法:transpose={0,1,2,3}
0:逆时针旋转90°然后垂直翻转
1:顺时针旋转90°
2:逆时针旋转90°
3:顺时针旋转90°然后水平翻转

ffmpeg -i input -vf transpose={0,1,2,3} output

8. 过滤器的使用
8.1 将输入的1920x1080缩小到960x540输出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 

//ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。
8.2 为视频添加logo
左上角

ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 

右上角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 

左下角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 

右下角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

8.3 去掉视频的logo

语法:-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0。

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4 
0 0
原创粉丝点击