FFmpeg基本常识及编码流程

FFmpeg是一个强大的音视频处理开源库,支持多种格式的编码、解码、转码和流传输。播放流程涉及封装格式、流、帧、编解码和数据包等概念。封装格式如MP4、AVI等,存储音视频流;流包含视频流、音频流等;帧是最小处理单元,分为I帧、P帧、B帧;编解码处理原始数据,编码器和解码器负责压缩和解压;数据包存放解码后的原始帧数据。转码流程包括解封装、解码、编码和封装。FFmpeg包含libavformat、libavcodec等组件,提供了解复用、编码、解码、过滤和播放等功能。
摘要由CSDN通过智能技术生成

1、FFmpeg


FFmpeg 强大专用于处理音视频的开源库,包含了先进的音视频编解码库,提供了录制、转换以及流传输音视频的完整跨平台解决方案。既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑音视频文件。

开源代码

https://github.com/FFmpeg/FFmpeg

特点

  • 功能完整:FFmpeg是领先的多媒体框架,能够解码(decode)、编码(encode)、转码(transcode)、复用(mux)、解复用(demux)、流(stream)、过滤(filter)和播放(play)人类和机器创建的几乎所有内容。

  • 几乎支持所有格式:FFmpeg支持最模糊的古代格式直至最前沿。无论是由某些标准委员会、社区还是公司设计的。

  • 跨平台高度可移植性:FFmpeg可以在各种构建环境:机器体系结构和配置下,跨Linux、Mac OS X、Microsoft Windows、BSD、Solaris等编译,运行并通过测试基础架构 FATE。

  • 每日更新的文档:各种在线每晚更新一次,并且对应于最新的FFmpeg版本。

2、FFmpeg播放流程及相关术语


2.1 播放流程:

video.avi(Container) -> 打开得到 Video_Stream -> 读取Packet -> 解析到 Frame -> 显示Frame。

2.2.1 「封装格式(Container Format)」

封装格式(Container Format),可看作是编码流(Stream)(音频、视频等)数据的一层外壳,将编码后数据存储于此封装格式的文件之内。

封装又称容器(Container),容器的用词更为形象。容器就是存放内容的器具。例如:饮料是内容,那么装饮料的瓶子就是容器。对视频来说,封装格式是MP4、AVI、MKV、RMVB等格式。

2.2.2 「流(Stream)」

流(Stream)是一种音视频数据信息的传输方式。有五种流:视频流(Video Stream)、音频流(Audio Stream)、字幕(Subtitle)、附件(t)、数据(d)。

例如:曾经多年前使用VCD看港片,可以选择粤语或国语声音,是视频文件中存放了两路音频流,可供用户选择其中一路进行播放。

2.2.3 「帧(Frame)」

帧(Frame)本意代表一幅静止的图像。

流(Stream)中,帧代表最小数据单元,也是编解码器真正处理的最小处理单元

数字视频处理的帧,通常不是说原始图像,而是被编码器编码后的一个图像。对于视频来说,帧(Frame)是编码器编码后的一个图像;对于音频来说,帧(Frame)是编码器编码后的一个声音

帧(Frame)分为:I帧:关键帧、P帧:预测帧、B帧:双向预测帧。

2.2.4 「编解码(Codec)」

每路音视频流(Stream)都会以帧(Frame)为最小单位,被相应的编/解码器(Codec)进行编码解码,以实现原始数据和压缩数据之间的相互转换。

编码(Codec)是对原始数据的加工,是对输入源进行处理,然后输出的过程。简单说,就是对图像和声音的压缩方法。视频编码主要有:H263、H264、H265、MPEG系列等。

编码(Codec)其实是编码(COde)和解码(DECode)的合称。CODEC = COde(编码) + DECode(解码)

解码就是把编码后的东西还原为原来的状态。对于视频来说,就是把压缩的图像和声音还原为正常可以播放的图像和声音。

编码可以改变文件格式,或者文件格式不变,只更改其他数据。FFmpeg编解码是基于比特流进行的。

2.2.5 「数据包(Packet)」

数据包(Packet)是从流(Stream)中读取的原始Raw数据片段,这些数据片段中,包含的是解码后能被应用程序处理的原始帧(Raw Frame)数据。[12]

分开的数据流在送往编解码(Codec)处理之前,要先放于缓存中,添加一些附属信息(例如:打上时间戳)以便后续处理,这个缓存空间就是数据包(Packet);由于数据流是在时间轴上交错放置,所有的视频、音频、字幕都被分割成一段一段的数据,这些一段段的数据从数据流中解析出来之后,就是存放在各自的数据包(Packet)

单纯的视频数据包来说&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值