音视频编解码的那些基础理论

简介: 本文主要讲的是视频文件的解码,从视频文件的封装格式解码到原始数据格式,通过讲解涉及到的各种概念,从而理清整个思路和流程。

作者:星陨
来源:音视频开发进阶

最近在研究学习 FFmpeg,从网上参考了好多资料,其中最了不起的就当属 —— 雷霄骅大神了,若没有他的博文,别说入门了,可能连门在哪里都不知道,在此还是要表达一下对雷神的敬佩和敬仰。

本文主要讲的是视频文件的解码,从视频文件的封装格式解码到原始数据格式,通过讲解涉及到的各种概念,从而理清整个思路和流程。

为何封装格式?

在我们平时接触到的视频文件,大都是以 .mp4.flv.avi.rmvb 后缀结尾的。

然而,事情并不是这么简单,这些后缀名其实还代表着一种封装格式,一种把音频数据和视频数据打包成一个文件的格式规范。

封装格式的编解码

在上面有讲到,视频文件其实包含着音频数据和视频数据,那么这些音频数据和视频数据又是如何形成封装格式的呢?

这里就涉及到编解码的知识了,原始的音频或者视频数据是很大的。比如,如果不进行压缩或者编码处理,用手机随便录一段视频可能就有几百 M 了,而有时候看部一个小时的电影也就才几百 M,这就是对原始数据处理方式不同的结果。

而我们的音频或者视频数据,也是要通过编码处理进行压缩,对他们进行编码处理后,体积都会变小,这样才能合并成具体的某种封装格式。

同时,当我们要播放视频或者音频时,还需要对编码压缩后的数据进行解码,从压缩的数据解码到原始数据,并将原始数据送到对应的设备,比如显卡或者声卡进行播放。这就是一个解封装的过程。

不同的封装格式支持的音视频编解码标准不一样,越是优越的封装格式,支持的编码标准越多,比如:MKV 封装格式,而 RMVB 封装格式就算落后的,支持的音视频标准有限。

这里,还是借雷神的图一张,很形象的解释了音频文件解码的整个过程。

  • 解协议 -> 封装格式数据
  • 解封装 -> 音频数据和视频数据
    • 音频解码 -> 设备输出
    • 视频解码 -> 设备输出

image.png

音视频的原始数据格式和编解码标准

在上面有讲到,封装格式其实就是音频或者视频的原始数据进行编码压缩得到的。而且,音频和视频对应的原始数# # 据格式和编解码标准都不一样。

音频的原始数据格式和编解码标准
音频的原始数据格式主要有如下几种:

  • PCM 格式
    音频的编解码标准主要有如下几种:
  • MP3
  • AAC
  • AC-3

    视频的原始数据格式和编解码标准

    视频的原始数据格式主要有如下几种:

  • YUV 格式
  • RGB 格式

视频的编解码标准主要有如下几种:

  • H.264
  • H.265
  • MPEG2

这些原始数据格式和编解码标准初次看是有点陌生,但接触多了,也就逐渐熟悉了,先以掌握主流的编解码标准为主,这里也只是列出了其中一部分而已。

MEPG->PCM 的解析

有了以上的理论基础,就可以开始我们的解析工作了。

使用 FFmpeg 3.x 的版本(与 2.x 版本相比接口有了较大变化)将 MEPG 的视频文件解码到 PCM 的原生数据格式。

这里的案例参考的是 FFmpeg 官网的例子,地址在此:http://ffmpeg.org/doxygen/trunk/examples.html

参考

  1. http://blog.csdn.net/leixiaohua1020/article/details/15811977
  2. http://ffmpeg.org/doxygen/trunk/examples.html

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
存储 Linux 开发工具
Linux开发工具——gcc篇
Linux开发工具——gcc篇
|
存储 编解码 调度
剖析ffmpeg视频解码播放:时间戳的处理
剖析ffmpeg视频解码播放:时间戳的处理
1129 0
|
存储 运维 安全
简化管理与提高效率:深入了解配置中心
在现代软件开发中,配置管理是至关重要的一环。随着应用程序规模的增长和多环境部署的需求,有效地管理配置变得越来越复杂。这时,配置中心成为了一个不可或缺的工具。在本文中,我们将深入探讨配置中心的概念、优势以及如何使用它来简化配置管理,提高开发和运维效率。
|
存储 缓存 安全
一文讲透认证授权的那些事
权限管理一直都是初级程序员学习的一大重点,也是一大难点,有单点登录,有联合登录,有session有Token,有各种权限框架,还有什么是RBAC,以及分布式下如何做权限管理。
1035 0
|
10月前
|
编解码 缓存 算法
视频帧里的I帧、P帧、B帧是什么?
I帧、P帧、B帧是视频编码中的基本概念。I帧是帧内编码帧,无需参考其他帧即可解码;P帧是前向预测编码帧,基于前一帧解码;B帧是双向预测编码帧,基于前后帧解码。IDR帧是一种特殊的I帧,用于即时解码刷新,防止错误传播。GOP(Group of Pictures)是一组连续的画面,第一个帧为I帧,gop_size设置越大,画质越好,但解码延迟增加。OpenGOP允许GOP间的帧依赖,而ClosedGOP则不允许。DTS(解码时间戳)和PTS(显示时间戳)分别用于解码和显示时间控制。
|
人工智能 JSON 自然语言处理
智谱AI GLM4开源!支持多模态&长序列,魔搭推理、微调最佳实践来啦!
GLM-4-9B是智谱AI推出的新一代预训练模型GLM-4系列的开源版本,它在多个数据集上的测试中表现出高绩效,包括语义理解、数学问题解决、推理和代码理解等方面。GLM-4-9B模型有四个变体:基础版GLM-4-9B(8K)、对话版GLM-4-9B-Chat(128K)、超长上下文版GLM-4-9B-Chat-1M(1M)和多模态版GLM-4V-9B-Chat(8K)。用户可以通过魔搭社区提供的链接体验这些模型,包括在CPU上运行的版本和支持vLLM推理的版本。
智谱AI GLM4开源!支持多模态&长序列,魔搭推理、微调最佳实践来啦!
|
12月前
|
JavaScript 前端开发 API
Vue3基础(十yi)___常用生命周期函数___setup___onMounted___onUpdated
本文介绍了Vue 3中的常用生命周期函数,包括`setup`、`onBeforeMount`、`onMounted`、`onBeforeUpdate`、`onUpdated`、`onBeforeUnmount`和`onUnmounted`,并解释了它们与Vue 2生命周期钩子的对应关系。文章通过代码示例展示了这些生命周期钩子在组件中的使用时机和场景。
331 0
|
存储 JavaScript 前端开发
Django + Vue 实现图片上传功能的全流程配置与详细操作指南
 在现代Web应用中,图片上传是一个常见且重要的功能。Django作为强大的Python Web框架,结合Vue.js这样的现代前端框架,能够高效地实现这一功能。本文将详细介绍如何在Django项目中配置图片上传的后端处理,并在Vue前端实现图片的选择、预览和上传功能。
|
前端开发 JavaScript
vue + element-UI 图片压缩canvas【详解】(含完整demo)
vue + element-UI 图片压缩canvas【详解】(含完整demo)
731 1
|
存储 关系型数据库 MySQL
MySQL索引的限制
【6月更文挑战第15天】MySQL索引的限制
555 3