当前位置:网站首页>音视频相关基础知识与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的八个函数库:
边栏推荐
- Programming hodgepodge (4)
- LCP 17. Quick Calculation Robot
- 7.15 Day21---MySQL----索引
- Tactile intelligent sharing - SSD20X realizes upgrade display progress bar
- sql server如何得到本条记录与上一条记录的差异,即变动值
- JS basics - forced type conversion (error-prone, self-use)
- 7.18 Day23----标记语言
- OpenSSF 安全计划:SBOM 将驱动软件供应链安全
- TensorRTx-YOLOv5工程解读(一)
- 力扣:62.不同路径
猜你喜欢
随机推荐
渗透测试(PenTest)基础指南
字节最爱问的智力题,你会几道?
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
符号表
Grain Mall - Basics (Project Introduction & Project Construction)
12. Paging plugin
npm安装依赖报错npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND
少年成就黑客,需要这些技能
[SemiDrive source code analysis] [MailBox inter-core communication] 47 - Analysis of RPMSG_IPCC_RPC mode limit size of single transmission and limit bandwidth test
FPGA学习笔记——知识点总结
力扣题解8/3
The symbol table
在被面试官说了无数次后,终于潜下心来整理了一下JVM的类加载器
【问题解决】同一机器上Flask部署TensorRT报错记录
Use Patroni callback script to bind VIP pit
Get the selected content of the radio box
力扣:343. 整数拆分
想好了吗?
Towards Real-Time Multi-Object Tracking (JDE)
力扣:63. 不同路径 II