ffmpeg常用命令

视频格式转换

1、命令:ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
2、格式:

  1. h264: 表示输出的是h264的视频裸流
  2. mp4: 表示输出的是mp4的视频
  3. mpegts: 表示ts视频流

1、分别提取音频、视频

1、提取视频

//保留封装格式
ffmpeg -i test.mp4 -vcodec copy -an video.mp4--提取视频(去除音频轨)

//保留编码格式(MP4中视频为h264编码)
ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264--提取视频(去除音频轨)

//强制转换编码格式(MP4中视频为非h264编码转为h264编码)
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264--提取视频(去除音频轨)

2、提取音频

//保留封装格式
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4--提取音频(去除视频轨)

//保留编码格式(MP4中音频为aac编码)
ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264--提取音频(去除视频轨)

//强制转换编码格式(MP4中音频为非mp3编码转为mp3编码)
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264--提取音频(去除视频轨)

2、修改视频格式/封装

1、截取视频固定时长内容

//-i:输入流;-ss:开始(截取)时间;-t:时间长度(截取10s)
//如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac
ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

2、MP4–>ts

//保持编码格式
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
ffmpeg -i test.mp4 -codec copy test_copy2.ts

//使用bitstream filter处理
ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
//分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。
//H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter处理。

//最简单粗暴方法,只考虑格式转换
ffmpeg -i input.mp4 output.ts

3、MP4–>flv

//保持编码格式
ffmpeg -i 1.mp4 -codec copy 1.flv
ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv output.flv

4、MP4–>avi

ffmpeg -i test.mp4 output.avi 

5、MP4–>mov

ffmpeg -i test.mp4 output.mov

6、MP4–>mkv

//改变编码格式
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv--改变编码器:libx265->libmp3lame
//修改视频码率:-b:v设置视频码率,修改视频码率为400k(降低清晰度)
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv--音频也被重新编码

7、MP4–>mpg

ffmpeg -i test.mp4 output.mpg //清晰度会下降很多

//MPEG4-->H264;-vcodec:设定视频编解码器为H264
ffmpeg -i input.mpg -vcodec h264 output.mpg

8、MP4–>gif

//-i:输入流;-t:时间;-r帧率(默认为25);-s:画面宽高;
ffmpeg -i test.mp4 -t 5 -r 1 image1.gif
ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif

9、MP4–>3pg

ffmpeg -i test.mp4 -s 176x144 -vcodec h263 -r 25 -b 12200 -ab 12200 -ac 1 -ar 8000 output.3gp

10、3pg–>flv

ffmpeg -i test.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 output.avi 

11、ts–>MP4

ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 output.mp4

12、flv–>MP4

//flv-->MP4直接转画质无下降
ffmpeg -i test.flv (-vcodec copy -acodec copy) output.mp4

13、flv–>avi

// H.264 bitstream malformed, no startcode found, use the video bitstream filter 'h264_mp4toannexb' to fix it ('-bsf:v h264_mp4toannexb' option with ffmpeg)
ffmpeg -i 茄汁烧豆腐.flv -vcodec copy -acodec copy -bsf:v h264_mp4toannexb 茄汁烧豆腐.avi
//简单粗暴,直接转,画质很模糊
ffmpeg -i 茄汁烧豆腐.flv 茄汁烧豆腐1.avi

14、flv–>3pg

ffmpeg -i test.flv -s 176x144 -vcodec h263 -r 25 -b 200 -ab 64 -acodec mp3 -ac 1-ar 8000 output.3gp

15、avi–>MP4

//-map 0  从输入索引 #0(第一个输入)中选择所有流
ffmpeg -i test.avi -c copy -map 0 output.mp4 

16、avi–>3pg

ffmpeg -i test.avi -s aqif -vcodec -acodec mp3 -ac 1 -ar 8000 -r 25 -ab 32 -y output.3gp

17、mov–>MP4

ffmpeg -i test.mov output.mp4

18、mkv–>MP4

//-y:不经过确认,输出时直接覆盖同名文件。
ffmpeg -i obj.mkv -y -vcodec copy -acodec copy output.mp4

19、mkv–>avi

ffmpeg -i test.mkv -vcodec copy -acodec copy output.avi

20、mpg–>mxf

ffmpeg -i input.mpg -vcodec mpeg2video -acodec pcm_s16le -ar 48000 -ac 2 output.mxf

21、GIF–>mp4

ffmpeg -f gif -i image2.gif image2.mp4

22、H264–>mp4

ffmpeg-i test.h264-vcodec copy-fmp4 output.mp4

23、H264–>ts

ffmpeg-i test.h264-vcodec copy-f mpegts output.ts

24、3pg–>flv

ffmpeg -i test.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 output.avi 

3、修改视频编码格式

1、MPEG4编码转成H264编码

//MPEG4-->H264;-vcodec:设定视频编解码器为H264
ffmpeg -i input.mp4 -vcodec h264 output.mp4
ffmpeg -i input.mp4 -strict -2 -vcodec h264 output.mp4

2、H264编码转成MPEG4编码

//H264-->MPEG4;-vcodec:设定视频编解码器为MPEG4
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
ffmpeg -i input.mp4 -strict -2 -vcodec mpeg4 output.mp4

4、修改参数

1、修改帧率

//-r设置帧速率,修改视频帧率为15
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4
ffmpeg -i test.mp4 -r 15 output2.mp4

2、仅修改视频码率

//修改视频码率:-b:v设置视频码率,修改视频码率为400k,将视频文件变小又不破坏分辨率
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv--音频也被重新编码

3、仅修改音频码率

//修改音频码率:-b:a设置音频码率,修改音频码率为192k
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4--视频也被重新编码
//若不想视频重新编码,需要加上-vcodec copy
ffmpeg -i test.mp4 -vcodec copy -b:a 192k output_ba.mp4

4、修改音视频码率

ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

5、修改视频分辨率

//-s设置画面的宽高:480×270
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

//使用过滤器改变:将输入的1920x1080缩小到960x540输出;-vf:视频过滤器
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比

//–aspect 16:9:宽高比为16:9

6、修改音频采样率

//-ar设置采样率:44100(hz)
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

音频格式转换

1、视频–>音频

1、mp4–>mp3

//-i: 表示输入的音频或视频;-acodec: 设定声音编解码--libmp3lame;-ac:设置声音的channel数,通道数默认为1;-ar:设置音频采样率
ffmpeg -i $ID.mp4 -acodec libmp3lame -ac 1 -ar 16000 $ID.mp3
//-i: 表示输入的音频或视频;-vn: 不做视频记录;-ab: bitrate 设置音频码率(=-b:a)
ffmpeg -i $ID.mp4 -vn -ab 128k -ar 16000 -y $ID.mp3

2、mp4–>wav

//-ac:设置声音的channel数,通道数默认为1;-ar:设置音频采样率
ffmpeg -i $ID.mp4 -ac 1 -ar 16000 $ID.wav

2、音频–>音频

1、wav–>mp3

//-f:强制使用某种输出格式,通常输入文件的格式是自动检测的,输出文件的格式根据后缀猜测,所以大多数情况不需要设置 -f 
ffmpeg -i input.wav -vn -ar 44100 -ac 2 -ab 192k -f mp3 output.mp3
ffmpeg -i audio.wav -acodec libmp3lame audio.mp3

2、wav–>flac

ffmpeg -i input.wav output.flac

3、wav–>ogg

ffmpeg -i input.aac -libvorbis output.ogg

4、wav–>aac

ffmpeg -i input.wav -acodec libfaac output.aac

5、wav–>ac3

ffmpeg -i input.wav -acodec ac3 output.ac3

6、wav–>amr

ffmpeg -i XXX.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 XXX.amr

7、wav–>pcm

ffmpeg -i xxx.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 xxx.pcm

8、aac–>wav

ffmpeg -i audio.aac audio.wav

9、aac–>mp3

ffmpeg -i audio.aac -acodec libmp3lame -ac 2 -ab 160 audio.mp3

10、aac–>ogg

ffmpeg -i input.aac -libvorbis output.ogg

11、aac–>ac3

ffmpeg -i audio.aac -acodec ac3 audio.ac3

12、mp3–>wav

ffmpeg -i XXX.mp3 -f wav XXX.wav

13、mp3–>pcm

//自定义格式:采样率16000hz,分辨率16bits,单声道
ffmpeg -i xxx.mp3 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 xxx.pcm

14、mp3–>ogg

ffmpeg -i xxx.mp3 -acodec libvorbis -ab 128k xxx.ogg

15、flac–>wav

ffmpeg -i input.flac output.flac

小结:

wav, mp3, aac, ac3, ogg之间的互相转换是相似的:
输出是mp3: -acodec libmp3lame
输出是aac: -acodec libfaac
输出是ac3: -acodec ac3
输出是ogg: -acodec libvorbis
至于其他参数选项,视需求使用。

图片格式转换

1、图片转图片

1、webp–>jpg

ffmpeg -i in.webp out.jpg

2、webp–>png

ffmpeg -i in.webp out.png

3、jpg–>png

ffmpeg -i in.jpg out.png

4、jpg–>webp

ffmpeg -i in.jpg out.webp

5、png–>webp

ffmpeg -i in.png out.webp

6、png–>jpg

ffmpeg -i in.png out.jpg

2、图片裁剪

ffmpeg -i image_source -vf crop=width:height:from_x:from_y out_source
#width是要裁剪出的图片的宽度
#height是要裁剪出的图片的高度
#from_x是裁剪的起始X轴的位置
#from_y是裁剪的起始Y轴的位置
#如果不指定from_x和from_y表示从原始图片中心位置开始裁剪

3、添加水印图片

ffmpeg -i image_source -vf movie=logo_source,scale=logo_width:logo_height,lut=a=val*opacity_num[watermask];[in][watermask] overlay=from_x:from_y[out] -y  out_source
#logo_source为水印图片地址
#logo_width为水印图片的宽度
#logo_height为水印图片的高度
#opacity_num为水印图片的透明度
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置

4、添加文字水印

ffmpeg -i image_source -vf drawtext=fontfile=font_ttf_path:fontcolor=font_color:fontsize=font_size:text=message_info:x=from_x:y=from_y  out_source
#font_ttf_path为字体路径,此项必须设置否则会出现字体无法找到的错误;
#字体路径要设置绝对路径并且要注意路径正反斜线转义(例如C\\:/Windows/Fonts/simhei.ttf)
#font_color为字体的颜色
#font_size为字体的大小
#message_info为水印文字内容
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置
#如果水印内容是中文需要设置中文字体否则会文字显示乱码

5、图片旋转指定的角度

ffmpeg -i image_source -vf rotate=route_num*PI/180 -y  out_source
#route_num是要旋转的角度
#当route_num大于0的时候顺时针旋转,当route_num小于0的时候逆时针旋转

6、图片旋转特殊简便命令

上面的命令理论上可以完成所有的图片旋转操作,但ffmpeg仍然存在特殊简便旋转命令

ffmpeg -i image_source -vf transpose=route_number -y out_source
#route_number=0顺时针旋转90度再左右镜像
#route_number=1顺时针旋转90度
#route_number=2逆时针旋转90度
#route_number=3逆时针旋转90度再左右镜像

7、图片左右镜像

ffmpeg -i image_source -vf hflip out_source

8、将图片上下镜像

ffmpeg -i image_source -vf vflip out_source

视频处理

1、视频压缩

将视频压缩到指定大小
ffmpeg  -i  Desktop/input.mp4  -fs 10MB  Desktop/output.mp4
-fs 10 : 表示文件大小最大值为10MB

设置视频的帧率为20fps
ffmpeg  -i  Desktop/input.mp4  -r 20  Desktop/output.mp4
-r 20:表示帧率设置为 20fps

设置视频的码率
ffmpeg  -i  Desktop/input.mp4  -b:v 1M  Desktop/output.mp4
-b:v :指定视频的码率
-b:a : 指定音频的码率
1M:码率的值 1M 表示 1Mb/s(清晰度会降低)

设置视频的分辨率
ffmpeg  -i  Desktop/input.mp4  -s 1920x1080  Desktop/output.mp4
-s 1920x1080表示分辨率为1920x1080
-s vga : 指定分辨率, vga 代表 600*480,也可以换成其他的值

可以结合上面的命令一起来使用
ffmpeg  -i  Desktop/input.mp4  -s 1920x1080  -b:v 1M  -r 20  Desktop/output.mp4
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值