PGS(Presentation graphic stream):图形字幕流,是用来显示蓝光电影中的字幕的流。当蓝光盘中的PGS格式的字幕被分离存储的时候通常保存在一个以sup为扩展名的文件中。(也可以以字幕流的形式封装在TS文件的pes包中)。
PGS有一个个的功能片段组成,这些片段通常包含下面的头部。

DTS用来指示何时开始解码字幕图片,PTS用来指示何时将字幕图片展示在屏幕上。实际上DTS通常为0,所以可以忽略该值。这些时间戳通常以90kHz为单位。例如一个值为0x0004c11c的PTS,如果要计算字幕图像显示时,从电影开始的毫秒值,应当把DTS值转换为十进制(311580)然后除以90,即为要得到的时间3462Ms(3.462秒)。
PGS片段的类型一共有5种:
  • Presentation Composition Segment(PCS)
  • Window Definition Segment(WDS)
  • Palette Definition Segment(PDS)
  • Object Definition Segment(ODS)
  • End of Disply Set Segment(END)
PCS片段也叫做控制片段,因为它指示着一个新的Display Set(DS)的开始,之后是由WDS、PDS和ODS等片段组成的片段序列,知道END片段出现。
一个Display Set(DS)是一个如下所示的字幕图像序列

在一个DS中,一般有多个window、palette以及object的定义,这个composition object定义了将要在屏幕中显示的内容。

1.Presentation Composition Segment

Presentation Composition segment用来合成一个字幕图像,有以下内容组成

composition状态可以取以下值:
  • Epoch Start:定义了一个新的display。Epoch Start包含了用来在屏幕上显示一个新的合成字幕图像的所有的功能片段
  • Acquistion Point:定义了一个display refresh。用来在Epoch中期合成字幕图像。它包含用于新的合成的带有新对象的功能片段,替换相同Object ID的旧对象
  • Normal:定义了display update,仅包含于前面的合成具有不同的元素的功能片段。通常用来通过定义一个空的合成对象(a value of zero in the Number of Composition Objects flag)来停止屏幕上当前显示的对象,同时也用来定义一个新的合成使用新的对象和从Epoch Start开始以来定义的对象
Composition object通常也被称为window information objects,定义了将要显示的字幕图像在屏幕中的位置,它的结构如下

当Object Cropped Flag被设置为true(通常为0x40),字幕图像将只显示被裁减的一部分。通常用于不想在一开始就显示整个字幕,而是一部分一部分地显示。

2.Window Definition Segment

该片段被用来定义屏幕上用来显示字幕图像的矩形区域,该矩形区域被称为Window,它的结构如下:

3.Palette Definition Segment

该片段被用来定义颜色转换的调色板,它的组成结构如下

由于可以有几个不同ID的调色板,因此,最后5个字段可以重复

4.Object Definition Segment

该片段定义了图形对象(一些将文字渲染在渲染在透明背景上的图像),其结构如下

Run-length编码方法定义在US 7912305 B1 patent,下面是对改变吗的简要说明

5.End Segment

end segment的segment size通常为0,标识着一个Display Set(DS)的结束,在一个DS中,它紧随着最后一个ODS出现。

6.示例

下面是一段SUP 文件

这是一个完整的Display Set包含的各个片段如下
  • First Segment: PCS, offset 0x00348a10

    • Magic Number: “PG” (0x5047)
    • Presentation Time: 17:11.822 (92,863,980 / 90)
    • Decoding Time: 0
    • Segment Type: PCS (0x16)
    • Segment Size: 0x13 bytes
    • Width: 1920 (0x780)
    • Height: 1080 (0x438)
    • Frame rate: 0x10
    • Composition Number: 430 (0x1ae)
    • Composition State: Epoch Start (0x80)
    • Palette Update Flag: false
    • Palette ID: 0
    • Number of Composition Objects: 1
    • Object ID: 0
    • Window ID: 0
    • Object Cropped Flag: false
    • Object Horizontal Position: 773 (0x305)
    • Object Vertical Position: 108 (0x06c)
  • Second Segment: WDS (0x17), offset 0x00348a30
    • Magic Number: “PG” (0x5047)
    • Presentation Time: 17:11.822 (92,863,980 / 90)
    • Decoding Time: 0
    • Segment Type: WDS (0x17)
    • Segment Size: 0x13 bytes
    • Window ID: 0
    • Window Horizontal Position: 773 (0x305)
    • Window Vertical Position: 108 (0x06c)
    • Window Width: 377 (0x179)
    • Window Height 43 (0x02b)
  • Third Segment: PDS (0x14), offset 0x00348a50
    • Magic Number: “PG” (0x5047)
    • Presentation Time: 17:11.822 (92,863,980 / 90)
    • Decoding Time: 0
    • Segment Type: PDS (0x14)
    • Segment Size: 0x9d bytes
    • Palette ID: 0
    • Palette Version: 0
    • 31 palette entries
  • Fourth Segment: ODS (0x15), offset 0x00348afa
    • Magic Number: “PG” (0x5047)
    • Presentation Time: 17:11.822 (92,863,980 / 90)
    • Decoding Time: 0
    • Segment Type: PDS (0x15)
    • Segment Size: 0x21c2 bytes
    • Object ID: 0
    • Object Version Number: 0
    • Last in sequence flag: First and last sequence (0xC0)
    • Object Data Length: 0x0021bb bytes
    • Width: 377 (0x179)
    • Height: 43 (0x02b)
  • Fifth Segment: END (0x80), offset 0x0034acc9
    • Magic Number: “PG” (0x5047)
    • Presentation Time: 17:11.822 (92,863,980 / 90)
    • Decoding Time: 0
    • Segment Type: END (0x80)
    • Segment Size: 0 bytes
该Display Set显示一张377x43大小的图片,起始时间戳为17:11.822,在屏幕上的偏移为773×108

【译】PGS字幕的更多相关文章

  1. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures 本篇分享一下第6个已完工的视频,即<beginner Graphics ...

  2. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes 本篇分享一下第5个已完工的视频,即<beginner Graphics – ...

  3. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials 既上一篇分享了中文字幕的灯光介绍Lights后,本篇分享一下第3个已完工 ...

  4. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights 既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的 ...

  5. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之摄像机介绍Cameras

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之摄像机介绍Cameras 最近得到一些Unity官方视频教程,一看全是纯英文的讲解,没有任何字幕或者 ...

  6. [tool] AI视频翻译 解决英文视频字幕问题(类似youtube自动生成字幕)

    1.网易见外是网易人工智能事业部旗下的AI视频翻译产品. 字幕支持手工编辑和下载 不过网易见外 只支持WEB在线操作 并且只支持单个上传操作 目前没有客户端 2.人人译视界 (IOS 安卓 PC客户端 ...

  7. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...

  8. [善用佳软]Chrome插件之彩云小译

    最近公众号新推出个栏目[善用佳软],旨在和大家分享各种小插件和制作开源小软件. 最近在浏览外网时,发现一个贼好用的翻译神器---[彩云小译],在网页端就可以快速的对照翻译出来,经过试用发现无论是速度还 ...

  9. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

随机推荐

  1. 内联汇编实现 memcpy 和 memset

    #pragma check_stack( off) LPVOID __cdecl _memcpy(void * dst, void* src, size_t size) { int dwSize = ...

  2. BZOJ5336 TJOI2018 party 【状压DP】*

    BZOJ5336 TJOI2018 party Description 小豆参加了NOI的游园会,会场上每完成一个项目就会获得一个奖章,奖章 只会是N, O, I的字样.在会场上他收集到了K个奖章组成 ...

  3. c语言标识符

    在程序中使用的变量名.函数名.标号等统称为标识符. 除库函数的函数名由系统定义外,其余都由用户自定义. C 规定,标识符只能是字母(A-Z,a-z).数字(0-9).下划线()组成的字符串,并且其第一 ...

  4. tableau-交互筛选器

    欢迎观看这段关于“交互筛选器”的视频.   将字段拖到筛选器功能区就可以轻松执行筛选,但是如果我们希望能够直接从视图中修改筛选器 选择项,那该怎么办?如果我们在可看到“子类别”字段的任何位置右键单击, ...

  5. 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作

    看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox( ...

  6. linux 系统下配置maven环境

    1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令: 2.解压源码包 通过终端在/usr/l ...

  7. Docker的主要组件

    Docker 的主要组件 安装 docker ,其实是安装了 docker 客户端.dockerd 等一系列的组件,其中比较重要的有下面几个. Docker CLI(docker)docker 程序是 ...

  8. [Oracle] CPU/PSU补丁安装详细教程

    Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患,以下是对CPU/PSU补丁安装的具体操作步骤 ...

  9. 数据双向绑定页面无反应(angularjs)

    问题引入 使用 angularjs进行过一段时间的开发后,基本上都会遇到一个这样的坑:页面进行了双向数据绑定,控制层的数据也已经改变了,但是视图层的数据却没有改变. 其实造成这个问题的原因大致分为以下 ...

  10. bzoj 2632 [neerc2011]Gcd guessing game——贪心(存疑)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2632 官方题解:http://neerc.ifmo.ru/archive/2011/neer ...