当前位置:网站首页>音视频相关基础知识与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的八个函数库:
边栏推荐
- 7.16 Day22---MYSQL(Dao模式封装JDBC)
- Can 't connect to MySQL server on' localhost3306 '(10061) simple solutions
- MySQL database (basic)
- 力扣题解8/3
- Web Basics and Exercises for C1 Certification - My Study Notes
- About yolo7 and gpu
- 代码重构:面向单元测试
- Camera2 闪光灯梳理
- [Cloud Native--Kubernetes] Pod Resource Management and Probe Detection
- 力扣:96.不同的二叉搜索树
猜你喜欢

DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片

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

Programming hodgepodge (4)

3面头条,花7天整理了面试题和学习笔记,已正式入职半个月

7.16 Day22---MYSQL(Dao模式封装JDBC)

FFmpeg源码分析:avformat_open_input

一个对象引用的思考

About yolo7 and gpu

4.3 Annotation-based declarative transactions and XML-based declarative transactions

The difference between px, em, and rem
随机推荐
Cannot read properties of null (reading ‘insertBefore‘)
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.1 Arrays are not pointers
8、自定义映射resultMap
word 公式编辑器 键入技巧 | 写数学作业必备速查表
C Expert Programming Chapter 5 Thinking about Chaining 5.6 Take it easy --- see who's talking: take the Turning quiz
入坑软件测试的经验与建议
MySQL database (basic)
想低成本保障软件安全?5大安全任务值得考虑
canal实现mysql数据同步
9、动态SQL
部署LVS-DR群集【实验】
4.2 声明式事务概念
12、分页插件
DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片
8大软件供应链攻击事件概述
flink cdc一启动,源端Oracle那台服务器的CPU就飙升到80%以上,会是啥原因呢?
Summary of MySQL database interview questions (2022 latest version)
The 2022 PMP exam has been delayed, should we be happy or worried?
7.13 Day20----MYSQL
【JS】js给对象动态添加、设置、删除属性名和属性值
