MBAFF与PAFF

 MBAFF与PAFF是两种帧场自适应编码。

一、为什么会产生field概念

       人眼可察觉到的电视视频图像刷新中的闪烁为0.02秒,即当电视系统的帧率低于50帧/秒,人眼可感觉得出画面的闪烁。常规如PAL制式电视系统帧率为25帧/秒、NTSC制式的则为30帧/秒,如果采用逐行扫描将不可避免地在视频刷新时产生闪烁现象。而另一方面如果单纯的提高帧率达到避免闪烁刷新效果,则会增加系统的频带宽度

       这便引出了隔行扫描技术及field的概念。

       在隔行扫描中,每一帧包含两个场(top field和bottom field),其中每个field包含一帧中一半数量的水平线(top field包含所有奇数线,bottom field则包含所有偶数线)。则在电视显示过程中,电子枪每发射一行隔一行---先发射奇数行13579…(top field)回头再发射2468…(bottom field)利用两次扫描来完成一幅图像,因为视觉的滞留性,我们看到的效果是差不多的。如在 NTSC 视频中frame的频率为30次/秒-àfield的频率则为60次/秒,大于了人眼可察觉闪烁的频率。

二、MBAFF

MBAFF---macro-block adaptive field-frame,即宏块级帧/场自适应编码;

PAFF--- picture adaptive field-frame,即图像自适应帧/场编码;

     隔行扫描编码分三种:

1、将两场合并为一帧进行编码;

2、将两场分别编码;

3、将两场合并为一帧,但是在宏块级别上,将一个帧宏块划分为两个场宏块进行编码;

      前两种编码方式称为图像自适应帧/场编码(PAFF),第三种称为宏块自适应帧/场编码(MBAFF)。

Case1---运动||非运动

       对于运动图像,由于场之间存在着较大的扫描间隔,所以帧中相邻两行之间的空间相关性相对于逐行扫描图像较小,因此对来两个场分别编码会更节省码流;

     对于非运动图像,相邻两行之间存在较大的空间相关性,将两场合并为一帧编码更有效;

      ​PAFF编码方式可以针对整个图像的编码方式做自适应调整,选择帧编码或场编码。

Case2---运动&非运动

       当图像同时存在运动区域和非运动区域时,PAFF自适应粒度太粗,无法实现满足更加精细的编码要求,于是便引出了MBAFF。

       MBAFF对帧/场编码的选择是基于宏块的,其将两场合并为一帧进行编码,但将每一个帧宏块(16x16)划分为场宏块对(8*16),针对每一个帧宏块,比较帧编码和场编码产生的码流大小,使用最节省码流的方式。

### 如何在 FFmpeg 中启用 MBAdaptive Frame Field (MBAff) 要在 FFmpeg 中启用 Macroblock Adaptive Frame Field (MBAFF),需要通过特定的命令行参数来设置视频编码器的相关选项。以下是详细的说明: #### 启用 MBAFF 的方法 1. **指定编码器支持 MBAFF** 使用 H.264 编码器时,可以通过 `-bf` 和 `-flags +ildct+ilme` 参数组合实现帧场自适应模式的支持[^1]。 2. **配置 Rate Control 方法** 如果使用的是 x264 编码库,则可以调整 RC(Rate Control)方法以优化性能。例如,在 CRF 模式下运行时,可通过以下方式设定比特率控制策略[^2]: ```bash ffmpeg -i input.mp4 -c:v libx264 -preset slow -tune film -profile:v high -level 4.0 -bf 2 -flags +ildct+ilme -pix_fmt yuv420p output.mp4 ``` 3. **具体参数解释** - `libx264`: 表示使用 x264 编码器。 - `-preset slow`: 设置编码速度预设为慢速,提高压缩效率。 - `-tune film`: 调整针对电影素材的最佳化。 - `-profile:v high`: 设定编码标准为 High Profile。 - `-level 4.0`: 定义兼容级别为 Level 4.0。 - `-bf 2`: 允许多达两个 B 帧用于预测。 - `-flags +ildct+ilme`: 开启 ILDCT(交错离散余弦变换)和 ILME(交错运动估计),这是启用 MBAFF 所需的关键标志位[^1]。 4. **关于 SAD 计算的理解补充** 在实际编码过程中,宏块的选择会涉及多种算法计算,比如基于 Sum of Absolute Differences (SAD) 来决定最佳匹配块的方式。这通常会在内部调用诸如 `x264_mb_analyse_intra()` 函数完成分析工作[^3]。 #### 示例代码片段 下面是一个完整的命令行例子展示如何应用上述参数: ```bash ffmpeg -y -i input.avi \ -c:v libx264 -b:v 5M -minrate 5M -maxrate 5M -bufsize 10M \ -preset veryslow -tune grain -profile:v high -level 4.2 \ -bf 3 -flags +ildct+ilme -partitions parti4x4+partp8x8+partb8x8 \ -me_method umh -me_range 32 -subq 9 -trellis 2 -g 250 -keyint_min 25 \ -sc_threshold 40 -i_qfactor 0.71 -b_strategy 2 -threads auto \ -pix_fmt yuv420p output.mp4 ``` 此脚本设置了较高的复杂度并开启了所有必要的功能来充分利用 MBAFF 技术的优势。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值