C++ 音视频八股文(视频编解码基础)

1. H.264和H.265的主要区别是什么?压缩效率和编码复杂度如何对比?

H.265(HEVC)相比H.264(AVC)主要有以下区别:

  • 压缩效率:H.265在相同画质下码率可降低约50%,或者在相同码率下画质更好
  • 编码单元:H.265支持更大的编码单元(CTU最大64x64),H.264最大宏块16x16
  • 预测模式:H.265帧内预测支持35种模式,H.264只有9种
  • 变换单元:H.265支持4x4到32x32多种尺寸,H.264主要是4x4和8x8
  • 编码复杂度:H.265编码复杂度是H.264的2-10倍,解码复杂度约1.5-2倍

实际应用中,H.265更适合4K/8K高分辨率视频和带宽受限场景,但需要更强的硬件支持。

2. 什么是I帧、P帧、B帧?它们在视频编码中的作用和压缩率有何不同?

  • I帧(Intra Frame):关键帧,完全独立编码,不依赖其他帧。作为解码起点,压缩率最低,数据量最大
  • P帧(Predicted Frame):前向预测帧,参考前面的I帧或P帧进行预测编码。压缩率中等,数据量约为I帧的1/3-1/2
  • B帧(Bi-directional Frame):双向预测帧,同时参考前后帧进行预测。压缩率最高,数据量最小,约为I帧的1/6-1/8

压缩率对比:I帧 < P帧 < B帧随机访问能力:I帧 > P帧 > B帧

3. 解释GOP(Group of Pictures)的概念,GOP大小对视频质量和码率有什么影响?

GOP是两个I帧之间的帧序列,定义了视频编码的帧组结构。常见格式如"IBBPBBPBBPBBI"。

GOP大小的影响:

  • GOP越大:压缩率越高,码率越低,但随机访问性能差,seek慢,错误传播影响范围大
  • GOP越小:码率越高,随机访问快,错误恢复能力强,但压缩效率降低

典型设置:

  • 直播场景:GOP=1-2秒(25-50帧),便于快速切入
  • 点播场景:GOP=2-10秒,追求压缩效率
  • 监控场景:GOP较小,便于回放定位

4. IDR帧和I帧有什么区别?

  • I帧:帧内编码帧,不依赖其他帧,但后续P/B帧可能参考I帧之前的帧
  • IDR帧(Instantaneous Decoder Refresh):特殊的I帧,强制刷新解码器状态,后续帧不能参考IDR之前的任何帧

关键区别:

  • IDR帧会清空DPB(Decoded Picture Buffer)参考帧缓存
  • IDR帧是随机访问点,可以独立解码
  • 所有IDR帧都是I帧,但不是所有I帧都是IDR帧
  • IDR帧用于场景切换、seek点、错误恢复

5. 什么是帧内预测和帧间预测?分别采用什么技术实现?

帧内预测(Intra Prediction):

  • 利用当前帧内已编码的相邻像素预测当前块
  • H.264支持9种预测模式(4x4亮度)和4种(16x16亮度)
  • H.265支持35种角度预测模式
  • 技术:方向预测、DC预测、Planar预测

帧间预测(Inter Prediction):

  • 利用参考帧预测当前帧
  • 技术包括: 运动估计(ME):搜索最佳匹配块运动补偿(MC):根据运动矢量重建预测块多参考帧预测亚像素插值(1/4或1/8像素精度)加权预测

6. 运动估计(Motion Estimation)的原理是什么?常用的运动估计算法有哪些?

原理:在参考帧中搜索与当前块最匹配的位置,计算运动矢量(MV),使预测残差最小。

常用算法:

  • 全搜索(Full Search):遍历搜索窗口所有位置,最优但计算量大
  • 三步搜索(TSS):粗到细的分层搜索
  • 菱形搜索(DS):菱形模式搜索,效率高
  • 六边形搜索(HEXBS):适合大运动
  • EPZS(Enhanced Predictive Zonal Search):利用时空相关性预测
  • UMH(Uneven Multi-Hexagon):x264使用的高效算法

评价标准:SAD(绝对差和)、MAD、SATD等。

7. 什么是运动补偿(Motion Compensation)?运动矢量在其中起什么作用?

运动补偿:根据运动矢量从参考帧中提取预测块,生成当前块的预测值,然后编码残差。

运动矢量(MV)的作用:

  • 指示参考块在参考帧中的位置偏移
  • 支持亚像素精度(1/4或1/8

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

晚上和一个老哥聊天,加深了自己对一些事情的思考就是一个人在公共场合敢实名表达自己的感受,自己的思考,自己的观点,是一件需要非常非常大勇气的事情,这意味着你触达内心的想法感受,会被大众所注视,审判,而绝大多数人都会异常在意别人对自己的看法,所以当大规模的眼光都看在你身上的时候,这种压力不是谁都能抗下来的。小一点的是在朋友圈写小作文发表自己内心的想法,之前我是能经常看到不少同学吃一个东西&nbsp;或者&nbsp;去一个地方玩然后长篇大论写下自己感受的朋友圈,但现在我也很少在朋友圈看到这些内容了,大家是长大了,开始忽略这些感受了,还是越来越不愿意拿出来分享了……大一点是直接做自媒体,更大范围地展示自己,直接向全互联网的人述说自己的经历,表达自己的想法,展示自己性感的大脑,让互联网的所有人凝视你,审判你,赞扬你,诋毁你……说实话,这非常像把自己扒光了游街示众的感觉,只有真正在互联网上实名发表过这种口播视频之后,才懂这种感觉有多奇妙哈哈哈我们不说钱不钱的问题,关说对个人能力的提升,这非常锻炼人,非常非常锻炼人,你的表达能力,你的心理素质都在全方面提升,你的心理抗压能力也会不断提升,因为无论怎么说都有人骂你,你说苹果手机好用,都有人骂你叛国贼[捂脸][捂脸][捂脸]一开始最大的障碍就是怕熟人看到,特别尴尬,怕大家议论你,嘲笑你,但其实真的有那么多人关注你吗?真的有那么多人嘲笑你吗?可能都是自己在臆想,出现幻觉了就算真的有人当面嘲笑你,这又怕什么呢,我始终坚信一个真正从0到1在某个领域做成功一件事的人(标准:得到这个领域人的普遍认可)是不会嘲笑一个开始很笨拙的人,因为谁不是这样走过来的?谁一开始就做的很好,谁刚开始做就很随心所欲,是你吗?一个健身大神会嘲笑一个刚入健身房的新手吗?一个高级程序员会嘲笑一个刚学会打hello&nbsp;world的新手吗?一个减肥成功的人会嘲笑刚开始跑几步路就喘的胖子吗?一个作家会嘲笑刚开始写小作文词不达意语句不通顺的菜鸟吗?一个人但凡能嘲笑你,那就证明他没做成哪怕至少一件事,没在一个领域得到绝大多数人的普遍认可,这种人的嘲笑是多么无力,这是他无能的狂怒,他自己不敢,自己半途而废,他怕你做成了,证明他自己是废物而已(这里说话比较难听)从我刚开始从化学跨行当程序员时,我就开始向外展示这些事情,然后无论在现实里还是在互联网上,我都听过非常非常多嘲笑的声音,否定的声音,所以我一度非常敏感,非常脆弱在大二这一年我几乎不敢见人,我每天吃喝拉撒都在实验室的小工位,我怕出去会被人嘲笑,会被否定,因为随随便便一句话我就能蹲在天台哭一晚上,直到我突然进了美团的日常实习,直到我突然进了字节的暑期实习,直到我秋招又拿了字节的offer,这个时候我已经站在高处,我回头看,我向下看,之前那些否定嘲笑的声音早已听不见,我已经在山上了,而他们又在哪呢?而我发现当时那些鼓励我,认可我,支持我的兄弟们,不是那些已经在某个领域取得一定成果的人,就是那些同样在路上的同伴,好像只有这些人,他们才会对蹒跚学步的新手给予鼓励与帮助……最后居然戏剧性地来了一个callback&nbsp;呼应了我大一演小品的一句台词且视他人之疑目如盏盏鬼火大胆地去走你的夜路!这是我自己的亲身经验,也是我想表达,传递的内容,想干什么就去干吧,至于别人怎么看,随他吧,反正弱者才会嘲笑你,强者都会向你伸出援手……
牛友故事会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务