欢迎光临散文网 会员登陆 & 注册

FFmpeg基本常识和相关术语

2021-12-21 22:32 作者:青泉石上_  | 我要投稿

1. FFmpeg

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


开源代码

github.com/FFmpeg/FFmpe


特点

1.功能完整:

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

2.几乎支持所有格式:

FFmpeg支持最模糊的古代格式直至最前沿。

无论是由某些标准委员会、社区还是公司设计的。

3.跨平台高度可移植性:

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

4.每日更新的文档:

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


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

2.1 播放流程:

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


2.2 相关术语:

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)数据

分开的数据流在送往编解码(Codec)处理之前,要先放于缓存中,

添加一些附属信息(例如:打上时间戳)以便后续处理,这个缓存空间就是数据包(Packet)


通信中Packet的理解:快遞郵包(分組→傳送→整合)

由于数据流是在时间轴上交错放置,所有的视频、音频、字幕都被分割成一段一段的数据,

这些一段段的数据从数据流中解析出来之后,就是存放在各自的数据包(Packet)


单纯的视频数据包来说,一个视频数据包可以存放一个视频帧;
单纯的音频帧来说,如果抽样率(sample-rate)是固定不变的,一个音频数据包可以存放几个音频帧;若是抽样率是可变的,则一个数据包就只能存放一个音频帧。



FFmpeg基本常识和相关术语的评论 (共 条)

分享到微博请遵守国家法律