跪拜 Guibai
← Back to the summary

What a DCP Actually Is: JPEG 2000, MXF, and the Tech That Delivers a Film to the Screen

Original address: https://glumes.com/dcp-digital-cinema-technology/

Recently, the animated film Niu Lai has sparked considerable discussion online.

Some discuss the visuals, some discuss the production, and some are curious: how exactly does such a film get into cinemas?

In fact, whether a film's production is refined or not is a different question from whether it can complete the technical delivery for cinemas.

This brings up a very interesting audio-video question:

Regardless of whether a film is exquisitely or simply made, what technical steps must it go through to actually be screened in a cinema?

Is it just copying an MP4 file onto a portable hard drive and handing it to the cinema staff to double-click and play?

Of course not.

In the standard digital cinema distribution chain, the task of film delivery is typically handled by the DCP, which stands for Digital Cinema Package.

Taking advantage of this 'cow' that suddenly barged into the cinema, let's talk about the DCP, MXF, JPEG 2000, PCM, KDM, and the digital cinema projection system behind the silver screen.

How a Film Enters the Cinema

Before we start, let's briefly string together the workflow from production to projection.

Figure: Simplified workflow from creative material to cinema projection

At the front is the relatively familiar production stage:

  1. Obtain raw material through camera shooting or animation rendering;
  2. Complete editing, VFX, color grading, subtitles, and multi-channel audio mixing, outputting the Digital Source Master (DSM);
  3. In the DCI specification model, organize the DSM into a Digital Cinema Distribution Master (DCDM) that meets digital cinema requirements;
  4. Encode the picture using JPEG 2000, then package the picture, sound, subtitles, and metadata into a DCP;
  5. Deliver to the cinema via hard drive or network, where the cinema system handles import, verification, authorization, and playback.

DSM and DCDM describe different stages in the specification. When actually using DCP creation software, these conversions might be completed in a single export process, and a separate DCDM directory may not necessarily be seen.

It's important to note here that film content review, artistic quality, and technical delivery are three different things.

A public screening permit addresses the access issue, while the DCP addresses the technical delivery issue. It concerns itself with:

Why Cinemas Don't Use MP4 Directly

When we usually download a movie, the most common format is MP4.

It might use H.264 or H.265 to encode the picture, AAC to encode the sound, and then place the audio, video, subtitles, and timestamps into a single MP4 container.

This design is very suitable for phones, computers, TVs, and internet transmission, but cinema distribution faces a different set of requirements.

Figure: Comparison of uses between a regular MP4 and a digital cinema DCP

Common video codecs in MP4 like H.264 and H.265 typically use inter-frame compression. Decoding a specific frame might require referencing other frames before or after it. This method is highly efficient for compression and well-suited for online video.

DCP's picture, however, uses JPEG 2000. It takes a single frame as the basic coding unit, does not rely on long GOPs, making it easier to locate by frame and limiting the impact of local data errors to a smaller range. How the film is split into Reels, and which picture and sound assets each Reel uses, is organized jointly by the CPL and MXF Track Files.

It's not about which is 'superior', but that their design goals differ:

So, a DCP is not a video codec, nor is it some special kind of MP4 container.

It is a complete cinema distribution package.

A DCP is Not a Single File, But a Set of Files

People opening a DCP directory for the first time are usually a bit confused.

Inside isn't a movie.dcp file, but a pile of XML and MXF files:

Figure: A simplified SMPTE DCP file structure

Different creation software, SMPTE DCPs, and older Interop DCPs may differ in file naming and subtitle organization. However, the core content of a common DCP can be roughly divided into the following categories.

ASSETMAP and VOLINDEX: Asset Map and Volume Information

ASSETMAP or ASSETMAP.xml acts as the asset index for the entire delivery package.

The cinema server uses it to find the assets within the package; if the index mentions a file that cannot be found on the actual medium, the verification tool should report an error. VOLINDEX is used to describe the position of the current medium within the complete set of delivery volumes. Although less prominent now, it remains part of the standard packaging structure.

PKL: Packing List

The PKL can be understood as a packing list.

It records the assets contained in the package, their file sizes, and hash information. When a cinema imports a DCP, this information can be used to determine if files are missing, corrupted, or have been accidentally modified.

It's important to note that the PKL is not a playback timeline. It focuses on 'what this delivery brought'.

CPL: Composition Playlist

The CPL is one of the most worthwhile XML files to study in the entire DCP.

It describes how a feature should be assembled and played back, including:

A single DCP can contain multiple CPLs. For example, if the picture is identical but the Mandarin, English, or subtitle versions differ, existing assets can be reused through different CPLs and supplemental packages.

The core reference relationships within a CPL can be simplified as follows:

<Reel>
  <AssetList>
    <MainPicture>
      <Id>urn:uuid:picture-track-id</Id>
    </MainPicture>
    <MainSound>
      <Id>urn:uuid:sound-track-id</Id>
    </MainSound>
    <MainSubtitle>
      <Id>urn:uuid:subtitle-track-id</Id>
    </MainSubtitle>
  </AssetList>
</Reel>

A real CPL will also include fields like namespaces, duration, Entry Point, Edit Rate, and hashes. The code above is only used to illustrate one thing: the CPL does not store the movie picture itself, but organizes the required Track Files through UUIDs.

Simply put:

The PKL cares about 'what's in the box', while the CPL cares about 'how these things should be played'.

MXF: Truly Carrying Picture and Sound

The large files with the .mxf extension are typically what actually occupies disk space.

MXF stands for Material eXchange Format. It is also a container format, not an encoding format.

In a DCP, picture and sound are generally not interleaved in the same file like a regular MP4, but exist as separate Track Files:

This track-separated design makes it convenient to replace languages, subtitles, or a segment of material, and also facilitates reusing existing files between different versions.

DCP's Picture: JPEG 2000, 12-bit, and X′Y′Z′

Next, let's look at the core picture technology within a DCP.

Why JPEG 2000 is Used

When mentioning JPEG, many people's first reaction is .jpg images. But JPEG 2000 is not about continuously stuffing regular JPEG pictures into a movie file.

It uses wavelet transformation, and each frame can be encoded independently. Compared to the long GOPs of common H.264 and H.265, JPEG 2000 has several characteristics suitable for cinema:

A common misconception needs correcting here:

The JPEG 2000 used in DCI digital cinema is typically not mathematically lossless compression, but aims for 'visually lossless' quality under normal cinema viewing conditions.

The DCI specification gives a maximum total bitrate for JPEG 2000 picture of 250 Mbit/s. This number is much larger than typical online video, which also explains why a feature-length DCP can easily exceed 100GB.

What 2K and 4K Actually Are

The common picture containers in digital cinema are not the 1920×1080 and 3840×2160 of everyday video.

Common Flat and Scope dimensions are as follows:

Aspect Ratio 2K 4K
Flat, approx. 1.85:1 1998×1080 3996×2160
Scope, approx. 2.39:1 2048×858 4096×1716

If the input is a 1920×1080 16:9 video being made into a 2K Flat DCP, the common practice is to maintain the aspect ratio and place the picture into the 1998×1080 Flat container, rather than simply stretching the picture horizontally.

Therefore, when creating a DCP, aspect ratio selection, cropping, and letterboxing/pillarboxing all require careful checking.

Why Not Common Y′CbCr and Rec.709

The most common processing chain for regular video is Y′CbCr, Rec.709, and 8-bit or 10-bit. In engineering, Y′CbCr is often loosely referred to as YUV, but strictly speaking, what is stored in digital video files is typically Y′CbCr data.

The DCDM image used in digital cinema employs encoded CIE XYZ tristimulus values, commonly represented as X′Y′Z′, with each component using 12-bit values.

The purpose of this is not for creators to edit directly in XYZ space, but to provide a unified digital cinema interchange standard for different cinema equipment.

In actual production, source material in Rec.709, P3, or other color spaces needs to undergo correct color conversion into the cinema's XYZ representation. The cinema's playback end then converts this data into light on the screen based on the calibrated projection system.

If the source file's color space is filled in incorrectly, even if the DCP can play normally, obvious color and brightness issues may occur.

Is DCP's Color Gamut Definitely Larger Than MP4's?

When talking about XYZ, it's easy to jump to an intuitive conclusion: DCP's color gamut must be larger than MP4's.

But strictly speaking, this question isn't comparing concepts on the same level.

JPEG 2000 is a picture encoding format, and MP4 is a container format; neither is responsible for defining the color gamut. An MP4 file can carry common Rec.709 video, as well as video in other color gamuts like Display P3 or BT.2020; JPEG 2000 similarly does not inherently equal DCI-P3, it's just that in a standard DCP, it is used together with 12-bit X′Y′Z′ color encoding.

If the comparison is limited to 'common online MP4' and 'standard SDR DCP', the two delivery chains can be understood as follows:

Comparison Item Common Online MP4 Standard SDR DCP
Common Combination MP4 + H.264/H.265 MXF + JPEG 2000
Color Representation Typically Y′CbCr X′Y′Z′
Common Gamut or Display Target Mostly Rec.709, can also be P3, BT.2020 Aimed at calibrated DCI-P3 cinema projection environment
Common Bit Depth 8-bit or 10-bit 12-bit per component
Chroma Resolution Common 4:2:0 Three color components maintain full resolution

There are three easily confused points here:

  1. Bit depth does not equal color gamut. 12-bit primarily improves numerical precision, reducing banding and quantization errors in gradients, and does not independently push the boundaries of the color gamut outward;
  2. Chroma subsampling also does not equal color gamut. Not using 4:2:0 can preserve more complete color spatial detail, but it won't magically add new representable colors;
  3. Format conversion does not create colors. A source film containing only Rec.709 gamut content, even when converted to a 12-bit XYZ DCP, will not automatically gain P3 colors that weren't present in the original material.

So a more accurate conclusion is:

The DCP's advantage isn't that 'JPEG 2000 inherently has a larger color gamut', but that it uses a unified 12-bit XYZ interchange format, preserving higher precision for cinema color management. The final number of colors that can be presented still depends on the source material, the color grading process, and the projection equipment.

DCP's Sound: Not Just Changing the Suffix of AAC

The main sound track of a DCP typically uses uncompressed linear PCM:

A distinction must be made here between 'what the system can support' and 'what the specific delivery specification allows'. DCI systems can support 48kHz or 96kHz audio, but the SMPTE Bv2.1 constraint for mainstream cinema delivery requires the use of 48kHz. In actual production, the specification and technical requirements adopted by the recipient should prevail.

Taking 5.1 channels as an example, they typically need to be correctly mapped to:

L    Left Channel
R    Right Channel
C    Center Channel
LFE  Low Frequency Effects Channel
Ls   Left Surround
Rs   Right Surround

Having the correct number of channels doesn't mean the channel mapping is necessarily correct.

If the center, LFE, or surround channels are placed incorrectly, the file might still be generated successfully, but the result heard in the cinema will be very strange. For cinema DCPs, sound checks are just as important as picture checks.

Furthermore, Dolby Atmos cannot be simply understood as 'stuffing a few more channels into a regular PCM MXF'. Object-based audio involves additional data, production workflows, and certified cinema playback systems, and cannot be conflated with regular 5.1 or 7.1 DCPs.

Why Subtitles Can Also Be a Source of Projection Accidents

DCP subtitles generally follow two approaches:

  1. Burned directly into the picture;
  2. Delivered as an independent Timed Text or subtitle track for the projection system to render.

The advantage of independent subtitles is the ability to reuse the picture, making it convenient to produce different language versions. But it also introduces new items to check:

Therefore, subtitle DCPs are best checked thoroughly on an actual cinema server or a reliable verification/playback tool, not just considered done if they look fine in the editing software.

KDM: Adding a Time-Limited Digital Key to the Movie

DCPs used in commercial cinemas are often content-encrypted.

The film can be delivered to the cinema in advance, but only systems holding the corresponding device certificate and within the authorized time window can decrypt it. This is where the KDM, Key Delivery Message, is needed.

Figure: KDM binds the content key, target device, and validity period together

A KDM can be understood as a 'digital key letter' written to a specific cinema device.

It involves the following key pieces of information:

Therefore, a KDM is not a generic key to unlock the 'entire DCP package', but is generated for one CPL, one target device certificate, and one validity period. If a DCP contains multiple CPLs, corresponding KDMs may need to be generated separately.

Consequently, even if two cinemas receive the exact same encrypted DCP, Cinema A's KDM usually cannot be used in Cinema B.

Device mismatch, system time outside the authorization window, or incorrect certificate information can all prevent the film from being decrypted.

This also explains why sometimes a movie file has long been imported into the cinema, but technicians still need to wait for or update the KDM.

How a DCP is Played in the Cinema

Once the DCP arrives at the cinema, it cannot be projected onto the screen immediately.

A simplified projection workflow is roughly as follows:

  1. Deliver the DCP to the cinema via professional hard drives, network, or other distribution systems;
  2. The cinema management system reads the ASSETMAP, imports files like MXF, CPL, and PKL into storage, and checks integrity;
  3. If the content is encrypted, import the KDM for the corresponding device and time period;
  4. Organize advertisements, trailers, the feature, and automation events through a Show Playlist;
  5. The Media Block or IMB decrypts and decodes the picture, sending PCM audio to the cinema audio processor;
  6. The projector casts the picture onto the screen, while the SMS or cinema automation system controls equipment like lighting and masking according to the instructions in the Show Playlist.

So the cinema's 'player' is not a regular computer with VLC, but a whole system designed around stability, interoperability, security, and automation.

Hands-On: Creating a 30-Second DCP

Just talking about concepts isn't enough. This time, I actually used DCP-o-matic 2.19.1 to complete a minimal practice run from test video and DCP encoding to full verification.

A relatively beginner-friendly tool is DCP-o-matic. It can convert materials like MP4, MOV, image sequences, WAV, and subtitles into a DCP, and also provides a player and verification tools.

To make the experiment reproducible, I first used FFmpeg to generate a 30-second test clip: 1920×1080, 24fps, Rec.709, with 48kHz AAC stereo audio.

ffmpeg -hide_banner -y \
  -f lavfi -i "testsrc2=size=1920x1080:rate=24" \
  -f lavfi -i "sine=frequency=1000:sample_rate=48000" \
  -t 30 \
  -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709" \
  -c:v libx264 -preset veryfast -pix_fmt yuv420p \
  -x264-params "colorprim=bt709:transfer=bt709:colormatrix=bt709" \
  -c:a aac -b:a 192k -ar 48000 -ac 2 \
  -shortest demo.mp4

Here, Rec.709 color primaries, transfer characteristics, and matrix flags were explicitly written. This is because 'the picture looks like Rec.709' and 'the file correctly declares itself as Rec.709' are not the same thing; DCP creation software needs the input color space to perform the XYZ conversion.

You can first check the input file using ffprobe:

ffprobe -v error \
  -show_entries stream=codec_name,width,height,r_frame_rate,color_space,color_transfer,color_primaries,sample_rate,channels \
  -of default=noprint_wrappers=1 \
  demo.mp4

The key results detected this time were: H.264, 1920×1080, 24fps, BT.709, and 48kHz stereo AAC. After confirming the source file, proceed to DCP creation.

Creating Using the Graphical Interface

The basic steps are as follows:

  1. Create a new Film project and add demo.mp4;
  2. Check the source video frame rate, aspect ratio, and input color space;
  3. Select SMPTE, 2K Flat, 24fps; for this test project, turn off encryption;
  4. Check cropping, scaling, and audio channel mapping;
  5. Click Make DCP to start encoding;
  6. Use DCP-o-matic Player to open the generated result;
  7. Execute Verify DCP to check for errors and warnings.

DCP-o-matic's verifier checks many easily overlooked issues, such as:

Creating Using the Command Line

If DCP-o-matic is already installed, you can also use the command line to replicate the experiment. The tools in the macOS installation package are located in the application directory by default; actual paths will differ on Windows and Linux.

DCPOMATIC_APP="/Applications/DCP-o-matic 2.app/Contents/MacOS"

"$DCPOMATIC_APP/dcpomatic2_create" \
  -o dcp-demo \
  --twok \
  --container-ratio 185 \
  --dcp-frame-rate 24 \
  --standard SMPTE \
  --video-bit-rate 50 \
  --audio-channels 6 \
  --no-encrypt \
  -c TST \
  -n "DCP Demo" \
  --colorspace rec709 \
  demo.mp4

"$DCPOMATIC_APP/dcpomatic2_cli" dcp-demo

The first command creates an SMPTE, 2K, Flat, 24fps, unencrypted test project, and the second command starts the actual encoding. --colorspace rec709 is placed before the input file because this option describes the material that follows it.

The JPEG 2000 target bitrate was set to 50 Mbit/s here, mainly to control the test file's size; what really prevented the experiment from taking too long was using only 30 seconds of material. This setting does not imply that a formal cinema master can or should only use 50 Mbit/s. The DCI specification allows a maximum total picture bitrate of 250 Mbit/s; actual projects should decide based on source quality, content complexity, and delivery requirements.

What Was Actually Generated

This time, DCP-o-matic encoded a total of 720 frames. The software reported an encoding phase time of about 25 seconds, with the actual wall clock time for the command being about 27 seconds. This time only represents this specific test machine and material, and should not be taken as general performance data.

Figure: Summary of results from this DCP-o-matic conversion and verification

The final directory name was:

DcpDemo_TST-1_F-178_XX-XX_20_2K_20260817_SMPTE_OV

Where TST indicates test content, F-178 indicates a 1.78:1 active picture within a Flat container, and 2K, SMPTE, OV represent resolution, standard, and Original Version, respectively. Actual recipients may have their own naming conventions; the directory name alone cannot replace the CPL and technical checks.

After encoding is complete, you can enter the final DCP directory to view the file structure. You should typically see content similar to the following:

ASSETMAP.xml
VOLINDEX.xml
cpl_bb1ce77d-....xml
pkl_a72d889a-....xml
j2c_55f38dac-....mxf    approx. 178.8 MiB
pcm_dbd24a1b-....mxf    approx. 24.7 MiB

Including the XML files, the logical size of the main assets was about 204 MiB, while the source MP4 was only about 18.8 MiB. Even using a test bitrate of only 50 Mbit/s this time, the DCP volume was already about 10 times that of the source file.

ffprobe read the picture track as JPEG 2000, xyz12le, 1998×1080, 24fps; the sound track was 24-bit, 48kHz, 6-channel linear PCM.

There are two easily overlooked details here.

First, the source video was 1920×1080, but the 2K Flat storage resolution is 1998×1080. The CPL recorded both a Stored Area of 1998×1080 and an Active Area of 1920×1080, indicating the content was placed into the Flat container maintaining its original aspect ratio and was not stretched horizontally.

Second, the source file only had two channels (left and right), but the output MXF had 6 channels. Further inspection revealed that L and R had signals, while C, LFE, Ls, and Rs were all silent, corresponding to 51/L,R,-,-,-,- in the CPL. This test DCP can pass specification verification, but it simultaneously reminds us: 'The MXF has 6 channels' does not equal 'the content has completed a 5.1 mix'.

If FFmpeg is installed on the local machine, you can also use ffprobe to see basic information about the picture and audio MXFs:

ffprobe -hide_banner j2c_*.mxf
ffprobe -hide_banner pcm_*.mxf

However, ffprobe can only help us observe the media tracks and cannot replace a complete DCP specification verification. Checks on the CPL, PKL, ASSETMAP, subtitles, encryption, and the reference relationships between different assets must still be handed over to specialized DCP verification tools.

Performing a Full Verification Using Verifier

The DCP-o-matic Player installation package comes with a command-line verification tool. On macOS, it can be run like this:

PLAYER_APP="/Applications/DCP-o-matic 2 Player.app/Contents/MacOS"
DCP_DIR="dcp-demo/DcpDemo_TST-1_F-178_XX-XX_20_2K_20260817_SMPTE_OV"

"$PLAYER_APP/dcpomatic2_verify_cli" \
  -o verify.txt \
  "$DCP_DIR"

This time, the verifier checked items including the picture and sound MXFs, CPL, PKL, ASSETMAP, asset hashes, and JPEG 2000 frame bitrate, ultimately outputting:

DCP verified OK.

The report also confirmed several key facts: the CPL had only 1 Reel, the picture and sound durations were both 720 Edit Units, all assets were unencrypted, the CPL's hash in the PKL matched, the picture MXF's hash also matched, and the bitrate of each JPEG 2000 frame was below the 250 Mbit/s upper limit.

It must be emphasized that DCP verified OK means this test package passed the structural and specification checks performed by the tool; it does not mean it has completed cinema delivery acceptance. Subtitle appearance, loudness, channel intent, color, picture cropping, and target device compatibility still require manual checks and test screenings.

Additionally, although FFmpeg can handle JPEG 2000, PCM, and some MXF, generating a DCP that can stably enter various cinema servers is not just a matter of executing a single transcoding command. For actual delivery, it is more appropriate to use specialized DCP creation and verification tools.

What Else to Check Before Actual Cinema Delivery

Successfully playing it on your own computer does not equal being ready to confidently deliver it to cinema chains.

Verification tools mainly check file structure and specification issues. The following items, which involve creative intent and the target cinema, still require manual confirmation:

This last item is particularly important.

Digital cinema specifications solve the compatibility problem between different systems, but in the real world, differences in cinema server versions, subtitle rendering, channel configuration, and projection presets still exist. For truly important films, the test screening cannot be skipped.

Back to Niu Lai

After discussing all this technology, looking back at Niu Lai makes things more interesting.

What the audience sees is the picture and story on the screen, but behind the scenes, the cinema sees a different set of things: JPEG 2000 picture tracks, PCM sound tracks, CPL playlists, PKL packing lists, subtitle files, and possibly KDMs.

A film's budget can be high or low; the picture can be refined or simple; the audience can like it or not.

But as long as it enters the standard digital cinema distribution process, it needs to cross a relatively rigorous technical threshold.

The DCP is not responsible for judging whether a film is art, nor is it responsible for guaranteeing box office success.

It is only responsible for one thing:

Delivering the correct picture and sound, at the correct time, to the correct cinema equipment, and playing it back stably.

This is probably the part most worth the attention of audio-video developers behind the Niu Lai buzz.

References

  1. Digital Cinema Initiatives: Digital Cinema System Specification
  2. Library of Congress: Digital Cinema Initiative Distribution Package
  3. DCP-o-matic Users' Manual
  4. DCP-o-matic: Creating a DCP from a video
  5. DCP-o-matic: Verifying DCPs
  6. DCP-o-matic: Flat and Scope picture size explanation
Comments

Top 1 from juejin.cn, machine-translated. The original thread is authoritative.

星河微尘

In-depth technical article, but the problems outside of technology are even harder to solve.