数字电影包

数字电影包（Digital Cinema Package，DCP），又称数字电影数据包，是一组用来储存数字电影的图像、声音和其他数据流的数字文件集。

DCP最早由数字电影倡导联盟（DCI）所推广，该联盟最初建议将其用于打包数字电影。然而，业界更倾向于将DCP作为打包不同“成分”(composition，这里指同一DCP中不同的单一媒体文件，例如广告片、预告片和正片）的方式。一个DCP可能包括一个成分的部分文件（例如单一的图像或音频），也可能包括完整的一个成分（例如完整的一部电影），也可能包括多个完整的成分（例如广告片+预告片+电影正片）。

一个成分包括一个以XML格式储存的成分播放列表（Composition Playlist，CPL），其指定了一系列不同轨道文件的播放顺序。而这些轨道文件经过编码，包含着音像信息，以高清晰度电视节目素材交换格式（MXF）被包装。根据电影电视工程师协会（SMPTE）ST429-2标准“数字电影包装”，一个成分至少要包含两个轨道文件，一个轨道文件包含图像，而另一个包含声音。这个完整的，包含播放列表和相关轨道文件的成分，被打包入DCP进行分发。一个成分通常是一个完整的作品，而DCP则并不一定。尽管如此，业界仍习惯用DCP来代表一个完整的影片，因为DCP需要被方便地交付到每个电影院。

图像轨道文件使用JPEG 2000进行编码压缩，音频轨道文件则是24位线性PCM未压缩多通道WAV文件。DCP也可以进行加密以保护其免受未经授权的使用（例如盗版电影），加密通过CBC模式下的128位AES进行。

在实际使用当中，应用了两个版本的成分模式。原始的版本称为“互操作DCP”（Interop DCP），现在已较少使用，但仍被部分商业放映服务器支持。而SMPTE在2009年发布的SMPTE DCP标准（SMPTE ST 429-2），则逐渐取代了前者，并成为了业界推荐使用的DCP标准。

## 技术规范

DCP根文件夹包含了一系列文件，一些用来存储音视频内容，另一些则用来存放播放列表。

### 图像MXF文件

图像内容可以被存放在不同的卷（reels）中，以对应一个或多个MXF文件。根据所选编码方式不同，每一个卷以JPEG 2000或MPEG-2编码来储存图像内容。但MPEG-2已不再符合DCI规范，所以JPEG 2000是现在唯一可用的压缩编码。

- SMPTE（JPEG 2000）
- 24, 25, 30, 48, 50, 60 帧 @ 2K
- 24, 25, 30 帧 @ 4K
- 24, 48 帧 @ 2K 3D
- MXF Interop （JPEG 2000）（过时）
- 24, 48 帧 @ 2K (也可以25帧编码，但不保证兼容性)
- 24 帧 @ 4K
- 24 帧 @ 2K 3D
- MXF Interop（MPEG-2）（过时）
- 23.976, 24 帧 @ 1920 × 1080
- 最大帧大小 2K - 2048 × 1080 4K - 4096 × 2160 常见制式有：
- SMPTE（JPEG 2000）
- 遮幅（Flat），1998 × 1080 或 3996 × 2160，宽高比 1.85:1
- 宽幅（Scope），2048 × 858 或 4096 × 1716，宽高比约 2.39:1
- HDTV，1920 × 1080 或 3840 × 2160，宽高比 16:9 ≈ 1.78:1（DCI规范中无明确定义，但符合DCI规范 第8.4.3.2节中的规定）
- 全幅（Full，Full Container），2048 × 1080 或 4096 × 2160，宽高比约 1.9:1 （不被影院广泛接受）
- MXF Interop（MPEG-2）（过时）
- 全幅（Full Frame），1920 × 1080
- 每像素每色12位色深（共36位）
- CIE 1931色彩空间（XYZ'色彩空间，伽马值2.6编码）
- 最大比特率 250 Mbit/s （24帧时每帧1.3MB）

### 声音MXF文件

声音内容也按照其所对应的图像内容被存储在不同的卷中。在有多个不同语言音轨的情况下，不同的语言音轨被存储在不同的卷中来对应不同的语言。

- 采样率 48,000 Hz 或 96,000 Hz
- 采样位深度 24位
- 线性映射（无压缩）
- 最多16个独立声道

### 资产映射文件（Assest map file）

DCP中所有文件的列表。（XML格式）

### 播放列表（CPL）文件的组成

规定了放映时的文件播放顺序，以XML格式存储。每个音视频卷都通过UUID来区分。在下面的例子里，一个卷同时包括了图像和声音。

```xml
<Reel>
  <Id>urn:uuid:632437bc-73f9-49ca-b687-fdb3f98f430c</Id>
  <AssetList>
    <MainPicture>
      <Id>urn:uuid:46afe8a3-50be-4986-b9c8-34f4ba69572f</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>340</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>340</Duration>
      <FrameRate>24 1</FrameRate>
      <ScreenAspectRatio>2048 858</ScreenAspectRatio>
    </MainPicture>
    <MainSound>
      <Id>urn:uuid:1fce0915-f8c7-48a7-b023-36e204a66ed1</Id>
      <EditRate>24 1</EditRate>
      <IntrinsicDuration>340</IntrinsicDuration>
      <EntryPoint>0</EntryPoint>
      <Duration>340</Duration>
    </MainSound>
  </AssetList>
</Reel>
```

### 封装清单（Packing list file）或封装密钥列表（Package key list，PKL）

一个成分里的所有文件都会被计算出哈希值，而这些哈希值就会以XML格式被存储在该文件中。该文件通常被放映服务器用来验证DCP文件是否损坏或被篡改。以下是一个MXF影像卷部分的PKL例子，通过`<asset>`标签来标记：

```xml
<Asset>
  <Id>urn:uuid:46afe8a3-50be-4986-b9c8-34f4ba69572f</Id>
  <Hash>iqZ3X7TdAjAqniOxT2/hj66VCUU=</Hash>
  <Size>210598692</Size>
  <Type>application/x-smpte-mxf;asdcpKind=Picture</Type>
</Asset>
```

这里的哈希值是SHA-1算法计算后再经Base64编码得到的，可以通过下列命令计算：

```
openssl sha1 -binary "FILE_NAME" | openssl base64
```

### 驱动器索引文件

一个DCP可能会被存储在不同的驱动器上（例如多块硬盘），该文件`VOLINDEX`被用来标记一个驱动器的序号。

= 3D DCP =

DCP格式也可以被用来存储立体（3D）内容，用来放映3D电影。这时，每秒钟会有48帧，24帧是左眼，24帧是右眼。

取决于放映系统的不同，左右眼的图像可能会在48帧下交替播放（主动快门3D），或者是同时以24帧播放（如IMAX 3D），这时则需要佩戴偏光式3D眼睛。

由于DCP的最大比特率是250 Mbit/s，播放3D影片时一侧眼睛的最大比特率就下降到了125 Mbit/s。尽管如此，这所带来的画质损失通常肉眼是无法注意到的。

= DCP的制作 =

大多数电影制作者和发行商利用数字电影编码设备来制作DCP，并完成相应的质检工作。这些设备通常遵循严格的DCI技术规范来确保制作的DCP兼容市面上所有的数字影院放映设备。对于更大的电影制作商，在DCP制作前，通常会先制作数字电影发行母版（DCDM）。

DCDM是电影后期制作中，排在DCP制作之前的一个步骤。这时的影片图像为XYZ TIFF格式，而且音像均未经过MXF封装。DCDM可以直接被编码为DCP，这使得影片存档和制作多语言电影版本变得格外方便。对于较小的电影制作商，制作DCDM这一步通常被省略，DCP则直接从数字源母版（DSM）编码得到。由于DSM可能有多种格式和色彩空间，因此在编码时需要格外注意色彩空间转换的问题，有时甚至需要使用来对不同版本的DCP和实体赛璐珞胶卷进行色彩一致性调整，以获得统一的观影体验。

要求较低的DCP从HDCAM SR等磁带格式中编码而来。对DCP的质检工作在经过校准的影院中进行，通常由调色师、导演、混音师等人员参加，用来确保成品DCP的图像与声音正确。

诸如OpenDCP，DCP-o-matic的软件使得在个人电脑上自行制作DCP成为可能。