ffmpeg主要组成部分

在多媒体处理中,filter的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。如:视频翻转,旋转,缩放等。

ffmpeg 主要有以下部分

warning

文章内容来自网络,如有侵权请联系我删除。

  • libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;
  • libavcodec:用于各种类型声音/图像编解码;
  • libavutil:包含一些公共的工具函数;
  • libswscale:用于视频场景比例缩放、色彩映射转换;
  • libpostproc:用于后期效果处理;
  • ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码;
  • ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;
  • ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

在这组成部分中,需要熟悉基础概念有

  • 容器(Container)

    容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。

  • 流(Stream)

    是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。

  • 帧(Frame)

    帧代表一幅静止的图像,分为I帧,P帧,B帧。

  • 编解码器(Codec)

    是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECode(解码)

  • 复用/解复用(mux/demux)

    把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
    把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)

  • FFmpeg程序把-i参数指定的若干文件内容读入到内存,按照输入的参数或者程序默认的参数来处理并且把结果写入到若干的文件中。输入和输出文件可以是计算机文件、管道、网络流、捕获设备等。
  • FFmpeg用libavformat包调用解复用器(demuxers)来读取输入文件中被编码的数据包(packets),如果有多个输入文件,FFmpeg以有效输入流的最小时间戳来同步,
  • 然后解码器(decoder)从已编码的数据包中产生未被压缩的帧(frame),在那之后调用可选的过滤器。
  • 这些帧被传递到编码器,编码器会产生新的编码包
  • 把新的编码包传递给复用器(muxer)处理并且把结果写入到输出文件中。

过滤器(Filter)

在多媒体处理中,filter的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。如:视频翻转,旋转,缩放等。
语法:[input_link_label1]… filter_name=parameters [output_link_label1]…

  • 视频过滤器 -vf
    如input.mp4视频按顺时针方向旋转90度
    ffplay -i input.mp4 -vf transpose=1
    如input.mp4视频水平翻转(左右翻转)
    ffplay -i input.mp4 -vf hflip

  • 音频过滤器 -af
    实现慢速播放,声音速度是原始速度的50%
    offplay input.mp3 -af atempo=0.5

  • 过滤器链(Filterchain)
    Filterchain = 逗号分隔的一组filter
    语法:“filter1,filter2,filter3,…filterN-2,filterN-1,filterN”
    顺时针旋转90度并水平翻转
    ffplay -i input.mp4 -vf transpose=1,hflip

  • 过滤器图(Filtergraph)

    • 第一步: 源视频宽度扩大两倍。
      ffmpeg -i jidu.mp4 -t 10 -vf pad=2*iw output.mp4
    • 第二步:源视频水平翻转
      ffmpeg -i jidu.mp4 -t 10 -vf hflip output2.mp4
    • 第三步:水平翻转视频覆盖output.mp4
      ffmpeg -i output.mp4 -i output2.mp4 -filter_complex overlay=w compare.mp4
      是不是很复杂?
      用带有链接标记的过滤器图(Filtergraph)只需一条命令

基本语法


    Filtergraph = 分号分隔的一组filterchain
    filterchain1;filterchain2;…filterchainN-1;filterchainN
    

Filtergraph的分类

简单(simple) 一对一
复杂(complex)多对一, 多对多
简单过滤器图处理流程: