FFmpeg 是一个开放源代码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能。这里结合自己的实际使用整理FFmpeg常用的命令和参数含义。
安装和使用格式
基于Ubuntu系统,只需要简单的apt命令就可以安装。
1 | sudo apt update |
安装完成之后就可以使用FFmpeg,输入ffmpeg
就可以查看其版本和配置信息。ffmpeg有许多命令参数,可以分为五个部分:
1 | ffmpeg {1} {2} -i {3} {4} {5} |
- 1.全局参数,例如
-y
,-v info
等等 - 2.输入文件参数,例如
-c:v libx264
等等 - 3.输入文件
- 4.输出文件参数
- 5.输出文件
使用示例:
1 | ffmpeg -y -v info -c:v libx264 -i input.mp4 -c:v libvpx-vp9 -c:a libvorbi output.webm |
常用命令行参数
常用的命令行参数说明:
-y
不经过确认,输出时直接覆盖同名文件-v info
指定日志级别,常用的有info
、error
-i
指定输入文件或流地址-c
指定编码器,一般常用-c copy
表示直接复制不进行重新编码-c:v
指定视频编码器-c:a
指定音频解码器-an
去除音频流-vn
去除视频流-f
强制使用格式输出,常用有-f mp4
、-f flv
、-f segment
-r
指定帧率,缺省25。例如-r 15
使用示例
1、查看文件或流信息
查看视频文件的元信息,比如编码格式和比特率或视频文件的持续时间和分辨率
1 | ffmpeg -i input.mp4 |
2、视频流转成本地视频文件
将直播流rtsp
或rtmp
录制成视频文件
1 | ffmpeg -y -i rtmp://ip:port/stream -f mp4 out.mp4 |
-f
可以指定参数为mp4
、flv
等- 如果流格式为
rtsp
可以使用参数-f rstp
指定输入流格式 - 可以使用
-rtsp_transport tcp
指定rtsp
使用tcp
协议
1 | ffmpeg \ |
3、从视频文件中截取一帧
截取视频文件第一帧输出为jpg
文件:
1 | ffmpeg -y -i input.mp4 -vframes 1 -f mjpeg output.jpg |
-vframes 1
指定帧数,这里指定1帧-f
输出图片格式,-f mjpeg
指定为jpg
;-f image2
指定输出格式为png
如果想从指定时间截取需要使用-ss
参数指定开始时间
1 | ffmpeg -y -ss 00:10:00 -i input.mp4 -vframes 1 -f mjpeg output.jpg |
-ss
指定开始时间,格式可以是:hh:mm:ss.xxx
,也可以是秒
如果需要持续截取多张图片,可以使用以下命令:
1 | ffmpeg -y \ |
注意参数 -ss
的位置
在截取本地视频文件时,参数-ss
应该在输入-i
参数之前。实际过程中多次将 -ss
放在-i
之后发现随着偏移时间的增大截取一帧的耗时越长,但是将-ss
放在-i
之前,就会发现截图时间是恒定和较低的。原因是前者每次都从视频文件的开始时间进行偏移,而后者直接定位当指定时间位置不用处理-ss
之前的部分。
4、视频文件裁剪
5、Mp4转Mp3
6、合并多个视频文件
多个视频文件需要将视频文件名按照先后顺序保存到input_list.txt
文件中,例如
1 | a.mp4 |
然后通过 -f concat
命令合并input_list.txt
文件中的视频为output.mp4
1 | ffmpeg \ |
这种方式是成功率很高,也是最好的
7、流文件处理
实际业务中处理过录制直播流按照指定时长切分成多个视频文件。
1 | ffmpeg \ |