博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多媒体开发之图像---帧与场的区别
阅读量:6330 次
发布时间:2019-06-22

本文共 2295 字,大约阅读时间需要 7 分钟。

---------------------------author:pkf

----------------------------------------time:2015-08-20

------------------------------------------------------------qq:1327706646

一、何谓场?

每个电视帧都是通过扫描屏幕两次而产生的,第二个扫描的线条刚好填满第一次扫描所留下的缝隙。每个扫描即称为一个场。因此 25 帧/秒的电视画面实际上为 50 场/秒 (若为 NTSC 则分别为 30 & 60 - 因为我是中国人,因此我采用 PAL 的数值)。

若要取得包含最大细节的帧,您需要合并两个场内的信息。截至目前为止,这些观念都很简单,不过若考虑到动态画面,就不是那么容易了。因为摄像机将依次地扫描这两个场,影像内的所有文件到了第二个场中将移到不同于第一个场的位置。这将有助于电视画面的动作更为顺畅,不过这也是场在编辑时所会造成的困扰。

二、计算机与电视

当计算机在显示器上播放视频时,它只会显示一系列完整的帧,而不使用交错场的电视技巧。因此针对计算机显示器所设计的视频格式和 MPEG-1 都不使用场。专为这些格式设计的视频编辑软件就无法正确地处理场,因此不适合产生用于电视的视频。若您的影片将通过电视来播放,务必使用可处理场的编辑程序。

三、概述

原始视频帧(最原始的视频数据)根据编码的需要,以不同的方式进行扫描产生两种视频帧:连续或隔行视频帧,隔行视频帧包括顶场和底场,连续(遂行)扫描的视频帧与隔行扫描视频帧有着不同的特性和编码特征,产生了所谓的帧编码和场编码。一般情况下,遂行帧进行帧编码,隔行帧可在帧编码和场编码间选取。扫描格式

在帧编码中,参考为帧图像,采用帧运动补偿,两个场是联合编码,;在场编码中,参考为场图像,两个场是分别编码,采用场运动补偿。

二、视频序列帧、场编码方式

1.固定帧编码(全帧)----视频序列的全部帧始终采用帧编码方式。

2.固定场编码(全场)

  视频序列中帧被分成两个场独立编码。编码规则:

  1. I帧可编码成两个I场或一个I场和一个P场,即II、IP.

  2. P帧可编码成两个P场或一个P场和一个B场,即PP、PB.

  3. B帧可编码成两个B场,即BB.

3.图像级帧、场自适应编码 (PAFF)

   视频序列能被编码成一个帧或两个场,自适应选择原则是根据采用该种编码方式的每一帧的RD

   值。

4.宏块级帧、场自适应(MBAFF)

       为了进一步提高编码效率,采用了宏块级帧场自适应.,宏块级采用了宏块对(MBP)为基本编码单元(如图2所示)

MBP格式

 

 

       H.264采用的MBAFF方案:

H.264 MBAFF编码方案

 

在图像中运动比较大的地方采用场编码,运动比较小的地方采用帧编码,编码顺序例子如下:

编码例子

视频编码中的PAFF和MBAFF的区别 收藏

 隔行扫描图像的每帧包括两个场,所以对于隔行扫描图像有三种编码方式:

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

 2、将两场分别编码

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

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

 对于一个运动图像,由于场之间存在着较大的扫描间隔,所以帧中相邻两行之间的空间相关性相对于逐行扫描图像较小,因此对来两个场分别编码会更节省码流。对于一个非运动图像,相邻两行之间存在较大的空间相关性,将两场合并为一帧编码更有效。所以PAFF编码方式可以针对整个图像的编码方式做自适应调整,选择帧编码或场编码。

 当图像同时存在运动区域和非运动区域时,PAFF的劣势便显现出来,PAFF的自适应粒度太粗,无法实现满足更加精细的编码要求,于是MBAFF应运而生。MBAFF对帧编码或场编码的选择是基于宏块的,MBAFF将两场合并为一帧进行编码,但将每一个帧宏块(16x16)划分为场宏块对(8*16),针对每一个帧宏块,比较帧编码和场编码产生的码流大小,使用最节省码流的方式。

 

 

 

视频序列一般分为隔行扫描和逐行扫描两种方式, 隔行扫描帧又分为上下场结构, 而视频显示技术通常以场为基本单位显示, 用于兼容隔行和逐行扫描两种方式.

 

  在视频序列扩展里有progressive_sequence标记, 用来区分视频帧的结构序列.   

  当progressive_sequence=1,表示后面的视频为逐行的帧图  
  progressive_sequence=0,表示后面的视频可以为场图,也可为帧图,帧图可以为逐行或隔行   
      
  在每图象扩展里有3个字段与图象的显示时间有关系。  
  分别为top_field_first  
  repeat_first_field  
  progressive_frame   
    
  这里讲的帧包含2场,比如以25帧/秒的速率播放,实际上为50场/秒  
  if   (progressive_sequence==1)  
  {  
     输出帧的2场为逐行  
    //重构帧的输出次数=top_field_first+repeat_first_field+1,最大重复输出次数为3  
  }  
  else  
  {  
   if   (progressive_frame==1)  
   {  
     输出帧的2场为逐行  
     if   (repeat_first_field=1)  
     {  
        输出3场,其中有一场为重复输出  
     }  
     else  
     {  
        输出2场  
     }  
   }  
   else  
   {  
     输出帧的2场为隔行  
   }   
 }  

 

 多播

转载于:https://www.cnblogs.com/pengkunfan/p/5011081.html

你可能感兴趣的文章
字符串格式化
查看>>
Why Should You Choose Linux?
查看>>
NetScaler 12.1 发布
查看>>
checkpoint system management
查看>>
CentOS 6.5安全加固及性能优化_操作系统
查看>>
每天laravel-20160709|CallEvent
查看>>
我的友情链接
查看>>
【三石jQuery视频教程】02.创建 FontAwesome 复选框和单选框
查看>>
Cisco 配置DHCP中继 代理工程 实例
查看>>
Centos7.3部署KVM虚拟化环境
查看>>
configure: error: Cannot find ldap.h
查看>>
Linux启动分析(2)— bootsect.S、setup.S、head.S分析
查看>>
自学java时的笔记(一)
查看>>
Qt之文本编辑器(二)
查看>>
python编译时检查语法错误
查看>>
考题纠错2
查看>>
SQL——索引
查看>>
Python新手快速入门教程-基础语法
查看>>
JVM性能调优入门
查看>>
关于raid的基本原理、软raid的实现演示
查看>>