学习笔记|(三)FFMPEG常用命令

学习笔记|(三)FFMPEG常用命令_第1张图片
常用命令.png

参考资料:https://ffmpeg.org/ffmpeg-all.html#Synopsis

一、基本信息查询命令:

  • ffmpeg -version显示版本信息

    学习笔记|(三)FFMPEG常用命令_第2张图片
    版本信息.png

  • ffmpeg devices支持的设备

    学习笔记|(三)FFMPEG常用命令_第3张图片
    ![可用的demuxers.png](https://upload-images.jianshu.io/upload_images/1340588-586df158a79aa8d4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  • ffmpeg -demuxers显示可用的demuxers(解封装)
    学习笔记|(三)FFMPEG常用命令_第4张图片
    ![所有的编解码器.png](https://upload-images.jianshu.io/upload_images/1340588-338010c5e0070aa2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • ffmpeg -muxers 显示可用的muxers(封装)
    学习笔记|(三)FFMPEG常用命令_第5张图片
    可用的muxers.png
  • ffmpeg -codecs显示所有的编解码器
    学习笔记|(三)FFMPEG常用命令_第6张图片
    所有的编解码器.png
  • ffmpeg -decoders显示可用的解码器
    学习笔记|(三)FFMPEG常用命令_第7张图片
    所有的解码器.png
  • ffmpeg -encoders显示可用的编码器

    学习笔记|(三)FFMPEG常用命令_第8张图片
    所有的编码器.png

  • ffmpeg -bsfs显示比特流filter

    学习笔记|(三)FFMPEG常用命令_第9张图片
    显示所有的比特流filter.png

  • ffmpeg -formats显示可用的格式
    ![
    学习笔记|(三)FFMPEG常用命令_第10张图片
    显示可用的协议.png
  • ffmpeg protocols显示可用的协议
    学习笔记|(三)FFMPEG常用命令_第11张图片
    显示可用的协议.png
  • ffmpeg -filters显示可用的过滤器

    学习笔记|(三)FFMPEG常用命令_第12张图片
    可用的过滤器.png

  • ffmpeg -pix_fmts显示可用的像素格式

    学习笔记|(三)FFMPEG常用命令_第13张图片
    可用的像素格式.png

  • ffmpeg -sample_fmts显示可用的采样格式

    学习笔记|(三)FFMPEG常用命令_第14张图片
    可用的采样格式.png

  • ffmpeg -layout显示可用的chanel名称(声道)

    学习笔记|(三)FFMPEG常用命令_第15张图片
    可用的声道.png

  • ffmpeg -color显示可识别的颜色名称

    学习笔记|(三)FFMPEG常用命令_第16张图片
    可用的颜色名称.png

二、录制命令:

  • 录制桌面视频
    【MAC】 ffmpeg -f avfoundation -i 1 -r 30 out.yuv

-f:使用什么库采集数据,ios中使用的是avfoundation
-i:从哪采集数据(是一个文件索引)
-r:帧率
out.yuv:表示原始格式数据,采集到的是什么样,存储的就是什么样

  • 录制声音
    【MAC】ffmpeg -f avfoundation -i :0 out.wav

-f : 使用什么库采集数据,ios中使用的是avfoundation
-i : 采集谁的数据::xx 表示音频设备,xx : 表示视频设备

查看windows上的采集库:

下载ffempeg的源码http://ffmpeg.org/download.html,通过cygwin进入到源码的根目录下,执行命令./configure --list-indevs就可以看到所有支持的库了;

学习笔记|(三)FFMPEG常用命令_第17张图片
下载ffempeg的源码.png
学习笔记|(三)FFMPEG常用命令_第18张图片
查看win上的采集库.png

三、分解与复用命令

1.分解与复用:文件格式的转换(Mp4-->mov/flv等)

学习笔记|(三)FFMPEG常用命令_第19张图片
复用解复用流程.png

【MAC】 ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i : 输入文件(要对哪个文件做处理)
-vcodec copy : 视频编码处理方式
-acodec copy :音频编码处理方式
out.flv : 输出格式

2.处理原始数据:

原始数据:就是ffmpeg解码后的数据,音频就是pcm数据,对于视频就是yuv数据,

2.1. 从视频中提取yuv数据

【MAC】ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

-i:输入数据,要对哪个文件做处理
-an:a指音频,n指no,即输出结果中不包括音频
-c:v:指对视频进行编码,用rawvideo方式(原始视频)
-pix_fmt : 既然是用原始数据编码,所以就要有像素格式,即yuv420p(yuv 4:2:0)
out.yuv : 输出文件

在播放yuv格式的视频的时候,要设置一个分辨率,否则会报错,Picture size 0x0 is invalid out.yuv,这里的分辨率可以在解码的过程中获取到
【MAC】播放视频 : ffplay -s 638x358 out.yuv

2.2.从音频中提取pcm数据

【MAC】ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm

-i :输入数据,也就是要对哪个文件做处理
-vn : video no,即输出结果中不包括视频
-ar : audio read,即音频的采样率,这里的44100表示44.1k
-ac : audio chennel,即声道,这里的ac2表示双声道
-f : format,即抽取出来的音频的存储格式是什么,s16le中s表示有符号的,有正有负,16表示每一个数值都是用16位表示,le : little end即小头,是一种存储方式;
out.pcm :输出的文件名字

【MAC】播放音频: ffplay -ar 44100 -ac 2 -f s16le out.pcm

四、滤镜命令

1.处理流程
学习笔记|(三)FFMPEG常用命令_第20张图片
滤镜处理流程.png
2.命令(有很多,比如加水印,去水印等)
  • 视频裁剪

【MAC】ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

-i : 要处理的文件
-vf : vedio filter视频滤镜,这里用的是crop滤镜,后面的in_w-200:in_h-200为滤镜参数,表示宽高为原始宽高-200
-c:v :视频的编码器,这里为libx264
-c:a : 音频编码器,copy表示不对音频做特殊处理
out.mp4 : 输出文件

五.裁剪合并编辑命令

  • 裁剪视频:
    【MAC】ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts

-i : 要处理的文件,指定多媒体文件是什么
-ss : 开始裁剪的时间(时分秒)
-t : 要裁剪的时长(单位:s)
out.ts : 输出文件

【MAC】播放:ffplay out.ts`

  • 音视频合并
    【MAC】ffmpeg -f concat -i inputs.txt out.flv

-f concat : 要对后面的文件进行拼接
-i : 要拼接的文件,inputs.txt中是一个列表,是要合并的视频名字
inputs.txt内容为:file filename格式
out.flv :输出文件的名字,这里的flv只是事例

【MAC】播放:ffplay out.flv

六、图片/视频互转命令

  • 视频转图片:
    【MAC】ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg

-i : 要处理的文件
-r : 要转换图片的帧率,1表示每秒转一张图片
-f : 转换后的格式,image的第二版

image-%3d.jpeg :输出文件,%3d表示是以image开头,后面是三个数字

【MAC】查看第一张图片:open image-001.jpeg

  • 图片转视频:
    【MAC】ffmpeg -i image-%3d.jpeg out.mp4

【MAC】播放:ffplay out.mp4,这时候会一下子放完,是因为

Ffmpeg 会从多媒体文件中读取帧率,一般情况下多媒体文件都是有帧率的。但对于流是不知道其帧率的,所以对于流相关的要主动给他一个帧率

七、直播

参考的直播链接:https://blog.csdn.net/u014162133/article/details/81188410
1,RTMP协议直播源
香港卫视:rtmp://live.hkstv.hk.lxdns.com/live/hks
2,RTSP协议直播源
珠海过澳门大厅摄像头监控:rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp
大熊兔(点播):rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
3,HTTP协议直播源 香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
苹果提供的测试源(点播):http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8

  • 直播推流
    【MAC】ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName

-re : 表示减慢帧率速度
-i :要推的流
-c : 音视频编解码,具体的音频编码是-acodec,视频编码是-vcodec,copy表示音视频的参数不变
-f : 推出的文件格式,这里是flv
rtmp : 表示推送到这个地址上面去

  • 直播拉流
    【MAC】ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

-i : 表示从哪拉流
-c : 拉到的流是否重新编码,copy 表示不重新编码
dump.flv : 保存的文件

你可能感兴趣的:(学习笔记|(三)FFMPEG常用命令)