【秒懂音视频开发】23_H.264编码

本文详述了H.264编码,一种广泛应用的视频压缩标准。通过介绍编码器、解码器的工作原理,以及帧内/帧间编码、变换与量化的过程,阐述了H.264如何有效压缩视频数据,达到高压缩比。同时讨论了GOP结构、帧类型以及编码中的关键概念,如运动补偿和DCT变换。
摘要由CSDN通过智能技术生成

本文主要介绍一种非常流行的视频编码:H.264

计算一下:10秒钟1080p(1920x1080)、30fps的YUV420P原始视频,需要占用多大的存储空间?

  • (10 * 30) * (1920 * 1080) * 1.5 = 933120000字节 ≈ 889.89MB
  • 可以看得出来,原始视频的体积是非常巨大的

由于网络带宽和硬盘存储空间都是非常有限的,因此,需要先使用视频编码技术(比如H.264编码)对原始视频进行压缩,然后再进行存储和分发。H.264编码的压缩比可以达到至少是100:1。

简介

H.264,又称为MPEG-4 Part 10,Advanced Video Coding

  • 译为:MPEG-4第10部分,高级视频编码
  • 简称:MPEG-4 AVC

H.264是迄今为止视频录制、压缩和分发的最常用格式。截至2019年9月,已有91%的视频开发人员使用了该格式。H.264提供了明显优于以前任何标准的压缩性能。H.264因其是蓝光盘的其中一种编解码标准而著名,所有蓝光盘播放器都必须能解码H.264。

编码器

H.264标准允许制造厂商自由地开发具有竞争力的创新产品,它并没有定义一个编码器,而是定义了编码器应该产生的输出码流。

x264是一款免费的高性能的H.264开源编码器。x264编码器在FFmpeg中的名称是libx264

AVCodec *codec = avcodec_find_encoder_by_name("libx264");

解码器

H.264标准中定义了一个解码方法,但是制造厂商可以自由地开发可选的具有竞争力的、新的解码器,前提是他们能够获得与标准中采用的方法同样的结果。

FFmpeg默认已经内置了一个H.264的解码器,名称是h264

AVCodec *codec1 = avcodec_find_decoder_by_name("h264");
 
// 或者
AVCodec *codec2 = avcodec_find_decoder(AV_CODEC_ID_H264);

编码过程与原理

H.264的编程过程比较复杂,本文只介绍大体的框架和脉络,具体细节就不展开了。

大体可以归纳为以下几个主要步骤:

  • 划分帧类型
  • 帧内/帧间编码
  • 变换 + 量化
  • 滤波
  • 熵编码

划分帧类型

有统计结果表明:在连续的几帧图像中,一般只有10%以

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值