FFmpeg学习记录(一)

FFmpeg学习记录



FFmpeg 简介

  • FFmpeg名字来源于MPEG视频编码标准,“FF”的代表“Fast Forward”。
  • FFmpeg可以用来记录、转换数字音频、视频,并能将其转化为
  • FFmpeg可以轻易实现多种视频格式之间的相互转换。

一、基础概念

  1. 容器/文件(conainer/file): 指特定格式的多媒体文件,如mp4、mkv等;

  2. 媒体流(stream): 指时间轴上的一段连续数据(声音、视频或字母数据),它可以是压缩的(需要关联特定的编解码器)也可以是非压缩的;

  3. 数据帧/数据包(frame/packet): 一般来说媒体流是由大量的数据帧组成,分属于不同媒体流的数据交错存储在容器中;(对于压缩数据,数据帧对应着编解码器的最小处理单元)
    一般来说,frame对应压缩前的数据;packet对应压缩后的数据

  4. 编解码器(codec): 以帧为单位实现压缩数据与原始数据之间的编码、解码的转换;

  5. 复用(mux): 把不同的流按照某种容器的规则(如mp4、mkv)放入容器的行为;
    在这里插入图片描述

  6. 解复用(demux): 把不同的流从某种容器中解析出来的行为;
    在这里插入图片描述

  7. 码率和帧率: 视频文件的重要基本特征:
    帧率: 即帧频率,是视频中每一秒的帧数;
    码率: 也叫比特率,是确定整体视频/音频质量的参数,码率和视频质量成正比。表示每秒处理的位数(有码率和时长可以计算出文件大小),单位bps

  8. 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(); //解码

猜你喜欢

转载自blog.csdn.net/weixin_49513223/article/details/126388789