FFmpeg学习记录
FFmpeg 简介
- FFmpeg名字来源于MPEG视频编码标准,“FF”的代表“Fast Forward”。
- FFmpeg可以用来记录、转换数字音频、视频,并能将其转化为流。
- FFmpeg可以轻易实现多种视频格式之间的相互转换。
一、基础概念
-
容器/文件(conainer/file): 指特定格式的多媒体文件,如mp4、mkv等;
-
媒体流(stream): 指时间轴上的一段连续数据(声音、视频或字母数据),它可以是压缩的(需要关联特定的编解码器)也可以是非压缩的;
-
数据帧/数据包(frame/packet): 一般来说媒体流是由大量的数据帧组成,分属于不同媒体流的数据交错存储在容器中;(对于压缩数据,数据帧对应着编解码器的最小处理单元)
一般来说,frame对应压缩前的数据;packet对应压缩后的数据
-
编解码器(codec): 以帧为单位实现压缩数据与原始数据之间的编码、解码的转换;
-
复用(mux): 把不同的流按照某种容器的规则(如mp4、mkv)放入容器的行为;
-
解复用(demux): 把不同的流从某种容器中解析出来的行为;
-
码率和帧率: 视频文件的重要基本特征:
帧率: 即帧频率,是视频中每一秒的帧数;
码率: 也叫比特率,是确定整体视频/音频质量的参数,码率和视频质量成正比。表示每秒处理的位数(有码率和时长可以计算出文件大小),单位bps。 -
FFmpeg音视频处理流程: 输入文件->(demuxer)->编码数据包->(decoder)->解码后数据帧->(filter帧处理)->处理后的数据帧->(encoder)->编码数据包->(muxer)->输出文件
二、FFmpeg命令
- ffmpeg -h:查看基本信息
- ffmpeg -h long:查看高级信息
- ffmpeg -h full:查看所有信息
ffplay/ffprobe 只有-h的命令
- ffmpeg -version:显示版本信息
- ffmpeg -buildconf:显示编译配置信息
- ffmpeg -formats:显示可用格式(muxers和demuxers)
- ffmpeg -muxers: 显示可用复用器
- ffmpeg -demuxers:显示可用解复用器
- ffmpeg -codecs:显示可用编码器(decoders和encoders)
- ffmpeg -decoders:显示可用解码器
- ffmpeg -encoders:显示可用编码器
- ffmpeg -bsfs:显示可用bitstream filter
- ffmpeg -protocols:显示可用协议
- ffmpeg -filters:显示可用过滤器
- ffmpeg -pix_fmts:显示可用的像素格式
- ffmpeg -layouts:显示标准声道名称
- ffmpeg -sample_fmts:显示可用的音频采样格式
- ffmpeg -colors:显示可用颜色
- ffmpeg -h type=name:查看具体分类所支持的参数
举例
ffmpeg -h muxer=flv
//注意:没有’s’
- ffplay命令
ffplay name(音视频文件名):播放音视频文件
-x width:强制设置显示宽度
-y height:强制设置显示高度
-video_size size:设置显示帧存储(WxH格式)
-pixel_format format:设置像素格式
-fs:以全屏模式启动
-an:禁用声音
-vn:禁用视频
-sn:禁用字幕
-ss pos:根据pos设置的秒数进行定位,或者使用时间格式“5‘5”,“01:03:02”
-t duration:设置播放视频/音频长度
-volume vol:设置起始音量,[0~100] - …
三、FFmpeg代码
1、常见函数
avformat_alloc_context(); //申请一个AVFormatContext结构的内存,并进行初始化
avformat_free_context(); //释放AVFormatContext结构的内存中的内容以及该结构本身
avformat_close_input(); //关闭解复用器,关闭后不需要再使用avformat_free_context();进行释放
avformat_open_input(); //打开输入视频文件
avformat_find_stream_info(); //获取视频文件信息
av_read_frame(); //读取音视频文件包
avformat_seek_file(); //定位文件
av_seek_frame(); //定位文件
avcodec_send_packet(); //解码
avcodec_receive_frame(); //解码