当前位置:网站首页>音视频相关基础知识与FFmpeg介绍
音视频相关基础知识与FFmpeg介绍
2022-08-04 05:25:00 【vivianluomin】
音视频基础知识
视频播放原理
下图是一个最简单的视频播放的过程(不包括视频加密等等过程):
这是一个视频播放的最基本的原理流程图,从这个图可以很整体的看到视频处理的一些主要步骤。
注意:我们利用FFmpeg进行编程的时候几乎就是基于这个流程图来进行的。比如说,编程的时候我们会按到编码器,解码读取数据,绘制到屏幕上的时候可能还需要把YUV数据转换为RGB等。
我们常见的封装视频的格式有:flv(音视频分开),mp4,avi等等。
为什么视频需要经过封装处理呢?
因为摄像头采集到的画面,以及麦克风采集到的音频数据是经过压缩的处理,不然视频文件就会很大。
也就是说:
- 录像,录音,是指上一个压缩采集的图像或者声音的过程。这个过程就是视频编码压缩的过程。
- 播放视频,音频文件实质上就是解压缩的过程,这个过程又称为解码。
视频的封装格式介绍
封装格式的作用是:视频码率和音频码率按照一定的格式存储在一个文件中/
封装格式分析工具:Elecard Format Analyzer
常见的视频封装格式:
以两个格子为例子,介绍一下原理:

- MEPG2-TS格式是由一个一个数据大小固定的TS-Packet组成,因此可以支持快进。
- FLY格式由FLV HEADER以及一个一个大小不固定的TAG组成。因为FLV格式直接能够用flash播放,因此常用于视频直播领域。我们在做RTMP推流的时候,一开始就需要发送头信息。因为数据单元大小不固定,因此原生的视频播放器不支持FLV视频的快进(有些播放器进行了处理可以快进)。
视频编码常见格式:
视频编解码格式:
- 常见的视频编码格式有:H.264、MPEG2、VP8等
- 视频解码得到的像素数据YUV、RGB。YUV格式中,Y代表亮度,UV代表色度,人眼对亮度比较敏感,两者比例为4:1。

原理分析:
以H.264为例,H.264是由大小不固定的NALU构成。(NALU实质是一种数据结构)。
H.264里面有很多子压缩算法,原理比较复杂,包括了熵解码,环路滤波,帧内检测,帧间检测等知识。H.264编码原理比较复杂,因此H.264的压缩效率是几百到几千倍。
视频解码(摄像机获取)得到的是视频像素数据,保存了屏幕上每个像素点的像素值。
常见的像素数据格式有RGB24、RGB32,YUV420P、YUV422P。YUV444P等。压缩编码中一般使用的是YUV格式的像素数据,最为常见的格式未YUV420P。

RGB也有很多种,比如RGB24,不同的RGB编码色彩丰富度不同。

音频编解码格式:
- 常见的音频格式有:AAC、MP3。
- 音频编码得到的是音频采样数据,然后喇叭才能播放。常见格式是PCM,实质上一个一个采样值。都拿我时间内震动的数据,包括振幅和频率。常用采样率44100,人耳能够察觉的最高采样率。

在做视频直播的时候:音频常用AAC进行编码,用FAAC库进行处理;视频用H.264编码。

音频采样数据PCM:保存了音频中每个采样点的值,音频采样数据体积很大,一般需要进行压缩,我们常说的“无损”实质上是没有损失的压缩。

相关播放(编辑)工具
- YUV:YUV Player
- PCM:Adobe Audition
- 查看视频信息:MediaInfo
- 视频编码数据:Elecard Format Analyzer
- 视频编码分析工具:Elecard Stream Eye
FFmpeg介绍
FFmpeg的八个函数库:
边栏推荐
- Landing, the IFC, GFC, FFC concept, layout rules, forming method, use is analysed
- TensorRTx-YOLOv5工程解读(二)
- static在不同位置定义变量居然还有不同的含义?
- C language -- operator details
- OpenCV获取和设置图像的平均亮度
- 7.18 Day23----标记语言
- 8.03 Day34---BaseMapper查询语句用法
- Unity Visual Effect Graph入门与实践
- The Road to Ad Monetization for Uni-app Mini Program Apps: Full Screen Video Ads
- 入坑软件测试的经验与建议
猜你喜欢

7.15 Day21---MySQL----索引

The symbol table
![[Cloud Native--Kubernetes] Pod Resource Management and Probe Detection](/img/1a/b3bdf9b62c82b0fc4d913045981d94.png)
[Cloud Native--Kubernetes] Pod Resource Management and Probe Detection

(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析
![[Evaluation model] Topsis method (pros and cons distance method)](/img/e7/c24241faced567f3e93f6ff3f20074.png)
[Evaluation model] Topsis method (pros and cons distance method)

Unity行为树AI分享

8.03 Day34---BaseMapper查询语句用法

想好了吗?

Unity表格配置编辑工具

idea设置识别.sql文件类型以及其他文件类型
随机推荐
8款最佳实践,保护你的 IaC 安全!
8、自定义映射resultMap
C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.5 Other Differences Between Arrays and Pointers
4.1 声明式事务之JdbcTemplate
Gartner 权威预测未来4年网络安全的8大发展趋势
力扣:63. 不同路径 II
leetcode 12. Integer to Roman numeral
word 公式编辑器 键入技巧 | 写数学作业必备速查表
Plus版SBOM:流水线物料清单PBOM
C language -- operator details
C Expert Programming Chapter 5 Thinking about Linking 5.3 5 Special Secrets of Library Linking
TSF微服务治理实战系列(一)——治理蓝图
即时通讯网 即时通讯音视频开发
Unity DOTS学习教程汇总
Embedded system driver primary [3] - _IO model in character device driver foundation
Canal mysql data synchronization
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
static在不同位置定义变量居然还有不同的含义?
嵌入式系统驱动初级【3】——字符设备驱动基础中_IO模型
LCP 17. 速算机器人
