Open cherishman2005 opened 3 years ago
视音频数据处理入门:RGB、YUV像素数据处理 https://blog.csdn.net/leixiaohua1020/article/details/50534150
https://github.com/xhunmon/VABlog
正所谓源于开源,回馈开源!以下是学习音视频路线推荐。丰富的音视频资料往最后翻。
技能 | 重要度 | 作用 | 学习建议 |
---|---|---|---|
c/c++ | ★★★★☆ | 音视频开源库基本都是用c/c++写的,如:FFmpeg库用C语言写的,Webrtc底层是用c++写的。 | 1. 看动脑或网易c/c++视频;2. 看书:c++ primer 第5版;3. 看FFmpeg源码;4. 最重要自己动手敲。 |
cmake | ★★★☆☆ | 跨平台引导编译的重要语言。在CMakeList.txt文件体现。 | 1. 看动脑CMake中视频;2. CMake 入门实战 |
shell | ★★☆☆☆ | 很多开源库都是通过shell脚本进行编译的。如ffmpeg和x264中configure。 | Shell脚本 |
Android NDK | ★★☆☆☆ | 在android平台上使用,需要掌握NDK的一些知识。如:交叉编译,JNI的接入。 | 看动脑NDK中JNI和交叉编译视频; |
IOS | ★★☆☆☆ | (略) | (略) |
[总结]视音频编解码技术零基础学习方法 系列文章,介绍了视音频编解码技术大体上原理和流程,通俗易懂。包括以下文章:
这个项目简单介绍音视频相关知识,以及实现的原理,总共分五章:
音视频开发是绕不开FFmpeg的,因为它是一个"集大成者",里面已经包含或可集成现代几乎所有的音视频技术(库)。
doc/examples/xxx
)这里不推荐直接学习雷神的 [总结]FFMPEG视音频编解码零基础学习方法,建议是通过在学习FFmpeg官方例子中进行学习,避免先入为主使用了过时的API。
编译ffmpeg4.2.2通过这篇文章我们基本可以编译出我们想要的FFmpeg库
doc/examples/demuxing_decoding.c
中的解封装部分。 doc/examples/muxing.c
。doc/examples/remuxing.c
。doc/examples/decode_audio.c
和 doc/examples/decode_video.c
。doc/examples/encode_audio.c
和 doc/examples/encode_video.c
。doc/examples/filtering_video.c
。doc/examples/filtering_video.c
。doc/examples/transcoding.c
。doc/examples/scaling_video.c
。OpenGL使用GPU渲染视频,释放宝贵的CPU资源,学习它是必不可少的。但是,正如雷神所说 :作为一个搞视频技术的人研究OpenGL,需要耗费大量时间和精力,这样学习不是很经济。所以推荐只学习有关视频渲染相关知识。
创作皆不易,有条件的朋友请支持原版,谢谢!
音视频文件的格式有封装格式、编码格式之分:
封装格式是因为音频、视频的同步需要而出现的,因此封装格式是 没有 视频封装格式、 音频封装格式这样的概念的,常见的封装格式有:Avi、Flv、Mkv、Mp4、Mov、Rmvb 等
编码格式则需要区分音频、视频: 常见的音频编码格式有:Mp3、AAC; 常见的视频编码格式有:H.26x 系列(H.261、H.263、H.264、H.265 等)、MPEG 系列(MPEG-1、MPEG-2、MPEG-4 等)
转码则是针对编码格式而言的,包括音频、视频。 比如从 MPEG-1 转码为 H.264。
造成音视频不同步的原因有很多种,学会分析其中的原因才是我们想要的,其中最好的方式就是看别人怎么做的。如果你在做播放的过程想参考一下音视频同步处理不妨看一下fftools/ffplay.c 。
人类视觉系统HVS
HVS的构成: 眼睛 神经 大脑
HVS特点: 对高频信息不敏感 对高对比度更敏感 对亮度信息比色度信息更敏感 对运动的信息更敏感
针对HVS的特点,数字视频系统的设计应该考虑哪些因素?
丢弃高频信息,只编码低频信息 提高边缘信息的主观质量 降低色度的解析度 对感兴趣区域(Region of Interesting,ROI)进行特殊处理
什么是RGB色彩空间?
三原色分别是红(R),绿(G),蓝(B)。任何颜色都可以通过按一定比例混合三原色产生。
RGB色度空间: 由RGB三原色组成 广泛用于BMP,TIFF,PPM等 每个色度成分通常用8bit表示[0,255]
什么是YUV色彩空间?
YUV色彩空间是指,Y:亮度分量,UV:两个色度分量。YUV能更好的反映HVS特点。
RGB如何转化到YUV空间?
主流的编解码标准的压缩对象都是YUV图像。
何为YUV图像分量采样?
YUV图像可以根据HVS的特点,对色度进行分量采样,可以降低视频数据量。
根据亮度和色度分量的采样比率,YUV图像通常有以下几种分量方式:
通用的YUV图像格式有哪些?
根据YUV图像的亮度、分辨率定义了如下图像格式:
I/P/B
码率控制
受到缓冲区,带宽的限制,编码码率不能无限制的增长,因此需要通过码率控制来将编码码流控制在目标码率范围内。
一般通过调整量化参数的手段控制码率:
帧级控制 条带级控制 宏块级控制
码率控制考虑的问题:
防止码流有较大的波动,导致缓冲区发生溢出, 同时保持缓冲区尽可能的充满,让图像质量尽可能的好而且稳定
CBR(Constant Bit Rate):比特率稳定,但图像质量变化大。VBR(Variable Bit Rate):比特率波动大,但图像质量稳定。
码率控制算法:
码率分配 码率控制
码率控制属于非标准技术,编码端有,解码端没有。