FFmpeg常用命令总结
ffmpeg命令分为8大类
-
查询命令
ffmpeg -devices
查看当前电脑的录制设备架构ffmpeg -f avfoundation -list_devices true -i ""
查看当前电脑的录制设备列表ffmpeg f
查看当前ffmpeg的各类详细信息ffmpeg -help
查看ffmpeg的帮助文档 -
录制命令
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
使用1图像设备(0:摄像头;1:录屏)录制文件名为out.yuv的30fps的视频ffmpeg -f avfoundation -i :0 out.aac
使用0音频设备(0:电脑自带的麦克风)录制名为out.aac的音频 -
解复用命令
ffmpeg -i demo.mp4 -vcodec copy -acodec copy demo.flv
将demo.mp4文件的音频和视频原封不动的拷贝成demo.flv文件,不改变其分辨率,格式,滤镜等ffmpeg -i demo.mp4 -vcodec copy -an demo.h264
将demo.mp4文件的视频原封不动的拷贝成demo.flv文件,但是不含音频ffmpeg -i demo.mp4 -vn -acodec copy demo.aac
将demo.mp4文件中的音频原封不动的拷贝成demo.aac文件,但是不含视频 -
处理原始数据命令
ffmpeg -i demo.mp4 -an -c:v rawvideo -pix_fmt yuv420p demo.yuv
将demo.mp4文件转成demo.yuv这样的原始视频数据文件,其中不包含音频。并且编码为rawvideo原始视频文件像素格式是yuv420p。yuv常用像素格式444p,422p,420pffmpeg -i demo.mp4 -vn -ar 44100 -ac 2 -f s16le demo.pcm
将demo.mp4文件中的音频抽取出来转成demo.pcm这样的音频原始文件,其中不包含视频。其中音频采样率(audio rate)为44100,音频声道为2声道(audio channel)音频编码格式是s16le(s代表有符号的,即正负;16代表16进制;le代表小的little end) -
音视频裁剪命令
ffmpeg -i demo.mp4 -ss 00:02:00 -t 20 demo.ts
将demo,mp4从2分钟进行裁剪,裁剪成10秒的一个视频
-ss代表从什么时间点开始裁剪
-t代表裁剪的时长
.ts格式是一种日本高清摄像机录制之后封装的视频格式 -
视频图片互转命令
ffmpeg -i demo.mp4 -r 1 -f image2 image_%3d.jpeg
将demo.mp4视频按照1秒钟1张图片的方式截成image2格式的图片,如果视频有22秒,那么最终就是22张
-r代表按照多少秒的间隔截取图片
image2是一种图片格式
image_%3d代表一种动态的命名规范,比如:image_001.jpegffmpeg -i image_%3d.jpeg demoImage.mp4
将符合image_%3.jpeg文件格式的所有文件转成mp4文件 -
直播流命令
推流命令
ffmpeg -re -i demo.mp4 -c copy -f flv rtmp://server/live/streamName
将demo.mp4文件推送到直播流地址中
-re代表减慢推流速度,让当前录制的视频和推流视频保持一致
-c代表音视频同时编码,如果只对视频编码-vcodec,音频就是-acodec
-f代表格式拉流命令
ffmpeg rtmp://server/live/steamName -c copy demo.flv
将rtmp地址上的视频拉到本地,同时对音视频编码保存到本地 -
滤镜命令
滤镜原理:
1. 拿到解码后的原始视频数据帧
2. 对原始视频数据帧进行加滤镜
3. 再进行编码得到滤镜后的编码数据包
ffmpeg -i demo.mp4 -vf crop=demo_w-200:demo_h-200 -c:v libx264 -c:a copy demo.mp4
将demo.mp4进行宽高各裁剪200像素的滤镜操作
-vf是对视频进行操作,crop是裁剪的意思后面跟着参数
-c:v 是对视频进行编码,后面跟着视频编码器,这里用的是lib264x
-c:a 是对音频进行编码,后面跟着音频编码器,这里用copy就是不变动音频 -
其他命令
ffplay demo.mp4
播放demo.mp4文件ffplay -s 1280x800 -pix_fmt uyvy422 demo.yuv
播放分辨率是1280x800的像素格式是uyvy422的demo.yuv视频原始文件
附录:
-i:后面接文件名,“i”是“index”索引的简称,用于找到文件
-s:后面接一个分辨率或者大小,“s”是“size”大小的简称,用于指定原始视频文件(如:yuv格式)的分辨率,如果不指定的话,视频无法正常播放
-c:后面接编码命令,-c代表对音视频同时编码,如果单独对音频或者视频编码使用-acodec或者-vcodec
-pix_fmt:后面接一个视频格式,如:yuv420p,uyvy422等。“pix”是“pixel”像素的简称,“fmt”是“fomat”格式的简称。同样,如果不指定的话,原始视频文件无法正常播放
-f:后面接一个格式,比如:flv,MP4等
-vn:不对视频编辑或者屏蔽视频的命令,“v”代表“video”视频,“n”代表“no”
-an:不对音频编辑或者屏蔽音频的命令,“a”代表“audio”音频,“n”代表“no”
-vcodec:对视频进行编码
-avodec:对音频进行编码
copy:拷贝命令,一般用于更改视频或者音频格式
-ac:代表音频声道,“a”代表“audio”,“c”代表“channel”
-ar:代表音频采样率,“a”代表“audio”,“r”代表“rate”