asdcp commands

Jack Watts | Apr 27, 2019 min read

Common command expressions used with asdcplib to wrap and unwrap DCinema and IMF essence into MXF trackfiles.

Digital Cinema

Picture ULs

SizePictureEssenceCoding UL ValueStandard
2K060e2b34.04010109.04010202.03010103(ST-429-4) 
4K060e2b34.04010109.04010202.03010104(ST-429-4)

Sound ULs

ConfigUL ValueStandard
Config01060e2b34.0401010b.04020210.03010100(ST-429-2) 
Config02060e2b34.0401010b.04020210.03010200(ST-429-2)
Config03060e2b34.0401010b.04020210.03010300(ST-429-2)
Config04060e2b34.0401010b.04020210.03010400(ST-429-2)
Config05060e2b34.0401010b.04020210.03010500(ST-429-2)

Soundfield Labels

The following expressions under the column ‘Label Writing’ should be passed to flag ‘-m’ when calling asdcp-wrap to write the relevant MCA tags.

SoundfieldGroupingLabel WritingChannel Assignment UL
220/L,R,-,-,-,-,-,-21(L,R),-,-,-,-,-,-060e2b34.0401010b.04020210.03010400
5.151/L,R,C,LFE,Ls,Rs,-,-51(L,R,C,LFE,Ls,Rs),-,-060e2b34.0401010b.04020210.03010400
7.171/L,R,C,LFE,Lss,Rss,-,-,-,-,Lrs,Rrs,-,-,-,-71(L,R,C,LFE,Lss,Rss),-,-,-,-,(Lrs,Rrs),-,-,-,-060e2b34.0401010b.04020210.03010400
5.1 - HI/VIN51/L,R,C,LFE,Ls,Rs,HI,VIN51(L,R,C,LFE,Ls,Rs),-,-060e2b34.0401010b.04020210.03010400
7.1 - HI/VIN71/L,R,C,LFE,Lss,Rss,HI,VIN,-,-,Lrs,Rrs,-,-,-,-71(L,R,C,LFE,Lss,Rss),HI,VIN,-,-,(Lrs,Rrs),-,-,-,-060e2b34.0401010b.04020210.03010400
5.1 - Dbox51/L,R,C,LFE,Ls,Rs,-,-,-,-,-,-DBOX,-,-,-51(L,R,C,LFE,Ls,Rs),-,-,-,-,-,-,DBOX,-,-,-060e2b34.0401010b.04020210.03010400
7.1 - Dbox71/L,R,C,LFE,Lss,Rss,-,-,-,-,Lrs,Rrs,DBOX,-,-,-71(L,R,C,LFE,Lss,Rss),-,-,-,-,(Lrs,Rrs),DBOX,-,-,-060e2b34.0401010b.04020210.03010400
5.1 - Atmos51/L,R,C,LFE,Ls,Rs,-,-,-,-,-,-,-,FSKSync,-,-51(L,R,C,LFE,Ls,Rs),-,-,-,-,-,-,-,FSKSync,-,-060e2b34.0401010b.04020210.03010400
7.1 - Atmos71/L,R,C,LFE,Lss,Rss,-,-,-,-,Lrs,Rrs,-,FSKSync,-,-71(L,R,C,LFE,Lss,Rss),-,-,-,-,(Lrs,Rrs),-,FSKSync,-,-060e2b34.0401010b.04020210.03010400

NOTE: The UL does not need to be passed as a flag. asdcplib handles the assignment of the correct UL based on the label pasded to flag ‘-m’.

SMPTE DCP Wrapping

TASK: Create a 2K JPEG 2000 SMPTE Track file at 24fps with a given uuid processing all frames assigning the correct UL

# generate the uuid to use for the track file AssetUUID
$ kmuuidgen
d2bf1228-b683-44eb-b4c6-71b3cc28c638

# call asdcp-wrap and create the track file
$ asdcp-wrap -v -a d2bf1228-b683-44eb-b4c6-71b3cc28c638 -P 060e2b34.04010109.04010202.03010103 / 
-p 24 j2c\1998x1080 mxf\J2C_d2bf1228-b683-44eb-b4c6-71b3cc28c638.mxf

Invoking the verbosity flag ‘-v’ will produce output for every JPEG file processed printed to stdout.

Next lets confirm that the values we passed were used by parsing the MXF we just created. We can do this by setting multiple flags to asdcp-info

# use asdcp-info to parse the track file
$ asdcp-info -c -i mxf\J2C_d2bf1228-b683-44eb-b4c6-71b3cc28c638.mxf
SMPTE 429 file essence type is JPEG 2000 pictures, (1248 edit units).
       ProductUUID: 7d836e16-37c7-4c22-b2e0-46a717e84f42
    ProductVersion: 2.10.31
       CompanyName: SMPTE VC

       ProductName: SMPTE DCP VC

  EncryptedEssence: No
         AssetUUID: d2bf1228-b683-44eb-b4c6-71b3cc28c638
    Label Set Type: SMPTE
PictureEssenceCoding: 060e2b34.04010109.04010202.03010103 (ST-429-4-2K)

As you can see from the output, this track file confirms that the values we passed upon wrapping were used. This track file can now be passed to you composition and packaging software tools for further processing.

Create an encrypted 2K JPEG 2000 SMPTE Trackfile at 24fps with a given uuid processing 240 frames (10 Secs) skipping the first 192 frames (8 secs) assigning the correct UL

# generate the uuid to use for the track file AssetUUID
5483b09d-388b-4331-be5f-b5fc81310aea

# generate the uuid to use for the track file key Id and 16 byte 
# hex string to use as the ciphertext key.
$ kmrandgen -s 16 && kmuuidgen
9a9cea05275ed0284d3605f37b0efc25 # this will be the key string

529a8697-6d60-476e-8471-7665a0a5d378 # this will be our key Id

# alternate option is to use trd-randgen
$ trd-randgen && trd-randgen uuid --t4
937fb5eafb74d6bb5745fea716070bb8
acabaa28-39bd-49f7-8a86-ebe2c998fd92

# now we create our encrypted track file
asdcp-wrap -v -L -a 5483b09d-388b-4331-be5f-b5fc81310aea -P 060e2b34.04010109.04010202.03010103 / 
-p 24 -j 529a8697-6d60-476e-8471-7665a0a5d378 -k 9a9cea05275ed0284d3605f37b0efc25 -f 192  / 
-d 240 j2c\1998x1080 mxf\J2C_5483b09d-388b-4331-be5f-b5fc81310aea_enc.mxf

Next lets confirm that the values we passed were used by parsing the MXF we just created. We can do this by setting multiple flags to asdcp-info

$ asdcp-info -i -c mxf\J2C_5483b09d-388b-4331-be5f-b5fc81310aea_enc.mxf
SMPTE 429 file essence type is JPEG 2000 pictures, (240 edit units).
       ProductUUID: 7d836e16-37c7-4c22-b2e0-46a717e84f42
    ProductVersion: 2.10.31
       CompanyName: SMPTE VC
       ProductName: SMPTE DCP VC

  EncryptedEssence: Yes
              HMAC: Yes
         ContextID: a2bc203f-21dc-44b6-9114-3f144551d4b4
CryptographicKeyID: 529a8697-6d60-476e-8471-7665a0a5d378
         AssetUUID: 5483b09d-388b-4331-be5f-b5fc81310aea
    Label Set Type: SMPTE
PictureEssenceCoding: 060e2b34.04010109.04010202.03010103 (ST-429-4-2K)

Confirming the correct values were used. We now have an encrypted trackfile.

Also, the ciphertext key needs to be kept in a safe place ‘9a9cea05275ed0284d3605f37b0efc25’. Normaly this is hashed and stored in an encrypted payload in a KDM which is cretaed at the same time as creating the trackfile.

Next we need to confirm the duration values were used

$ asdcp-info -n mxf\J2C_5483b09d-388b-4331-be5f-b5fc81310aea_enc.mxf
SMPTE 429 file essence type is JPEG 2000 pictures, (240 edit units).
...
060e2b34.02530101.0d010201.01100100  len:    2760 (IndexTableSegment)
             InstanceUID = 20a0ec77-a6d6-48c8-8de8-d4f98b6e923e
  IndexEditRate      = 24/1 # <= confirmed 24fps
  ...
  IndexStartPosition = 0
  IndexDuration      = 240 # <= confirmed 10 secs in length
  ...
  EditUnitByteCount  = 0
  IndexSID           = 129
  BodySID            = 1
  SliceCount         = 0
  PosTableCount      = 0
  DeltaEntryArray:
...

Unwrapping

Unwrapping a track file

$ asdcp-unwrap -v -k 9a9cea05275ed0284d3605f37b0efc25 / 
mxf\J2C_5483b09d-388b-4331-be5f-b5fc81310aea_enc.mxf unwrap\j2c\frame.

In this example, we use the ciphertext key to unwrap the encrypted mxf we just created.

TASK: Create a SMPTE 5.1 w/HI & VIN audio track file as per RDD52 at 24fps with a given uuid processing all samples assigning the correct UL.

$ asdcp-wrap -v -L -C 060e2b34.0401010b.04020210.03010400 -a 0fefbe07-08aa-493e-8af2-0044dee332df / 
-p 24 -g en-GB -l 'WTF' -m 51(L,R,C,LFE,LS,Rs),HI,VIN wav\51\ mxf\WAV_0fefbe07-08aa-493e-8af2-0044dee332df.mxf

To confirm

$ asdcp-info -H mxf\WAV_0fefbe07-08aa-493e-8af2-0044dee332df.mxf
SMPTE 429 file essence type is PCM audio, (1248 edit units).
...
060e2b34.02530101.0d010101.01014800  len:     295 (WaveAudioDescriptor)
             InstanceUID = ba0f6c04-9923-4f49-a395-c68861009677
                Locators:
          SubDescriptors:
  bd70993d-9be8-4ed8-8dc1-45865fee4e54
  726dde5b-2295-49f8-9bcd-7d552ea22fb7
  6ab9f24c-3690-46fe-beeb-690951b1ee1c
  0c306ea3-089f-48cd-a048-e0ef49bb8a59
  a38fef37-4aad-40c3-9987-de8de21cc57c
  b553f9bb-4513-41d1-8b0b-683cd65db675
  5192b017-6e27-4e7e-84b7-dcbcb068b6b9
  4065b7db-6a98-44c2-abc9-49a9b9df56fb
  1ccf48b6-718b-4dc6-a133-d016f241802d
           LinkedTrackID = 2
              SampleRate = 24/1
       ContainerDuration = 1248
        EssenceContainer = 060e2b34.04010101.0d010301.02060100
       AudioSamplingRate = 48000/1
                  Locked = 0
            ChannelCount = 8
        QuantizationBits = 24
      SoundEssenceCoding = 00000000.00000000.00000000.00000000
              BlockAlign = 24
                  AvgBps = 1152000
       ChannelAssignment = 060e2b34.0401010b.04020210.03010400

060e2b34.02530101.0d010101.01016c00  len:      91 (SoundfieldGroupLabelSubDescriptor)
             InstanceUID = bd70993d-9be8-4ed8-8dc1-45865fee4e54
    MCALabelDictionaryID = 060e2b34.0401010d.03020201.00000000
               MCALinkID = c4c58f20-e391-443f-95ef-7e142fcbf065
            MCATagSymbol = sg51
              MCATagName = 5.1
   RFC5646SpokenLanguage = en-GB

060e2b34.02530101.0d010101.01016b00  len:     119 (AudioChannelLabelSubDescriptor)
             InstanceUID = 726dde5b-2295-49f8-9bcd-7d552ea22fb7
    MCALabelDictionaryID = 060e2b34.0401010d.03020101.00000000
               MCALinkID = 42499fb1-0b8a-4ae3-bdab-20f45774d27a
            MCATagSymbol = chL
              MCATagName = Left
            MCAChannelID = 1
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     121 (AudioChannelLabelSubDescriptor)
             InstanceUID = 6ab9f24c-3690-46fe-beeb-690951b1ee1c
    MCALabelDictionaryID = 060e2b34.0401010d.03020102.00000000
               MCALinkID = fe2830d5-d9c6-4341-991f-57b024fdbd38
            MCATagSymbol = chR
              MCATagName = Right
            MCAChannelID = 2
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     123 (AudioChannelLabelSubDescriptor)
             InstanceUID = 0c306ea3-089f-48cd-a048-e0ef49bb8a59
    MCALabelDictionaryID = 060e2b34.0401010d.03020103.00000000
               MCALinkID = 6bacb5a2-bb32-431a-85b8-ad8e788516dc
            MCATagSymbol = chC
              MCATagName = Center
            MCAChannelID = 3
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     121 (AudioChannelLabelSubDescriptor)
             InstanceUID = a38fef37-4aad-40c3-9987-de8de21cc57c
    MCALabelDictionaryID = 060e2b34.0401010d.03020104.00000000
               MCALinkID = 4fe8d4b4-52c6-4e22-8590-5f58bf246682
            MCATagSymbol = chLFE
              MCATagName = LFE
            MCAChannelID = 4
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     139 (AudioChannelLabelSubDescriptor)
             InstanceUID = b553f9bb-4513-41d1-8b0b-683cd65db675
    MCALabelDictionaryID = 060e2b34.0401010d.03020105.00000000
               MCALinkID = c52b2b63-bcfd-4f4d-a925-704ac134a374
            MCATagSymbol = chLs
              MCATagName = Left Surround
            MCAChannelID = 5
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     141 (AudioChannelLabelSubDescriptor)
             InstanceUID = 5192b017-6e27-4e7e-84b7-dcbcb068b6b9
    MCALabelDictionaryID = 060e2b34.0401010d.03020106.00000000
               MCALinkID = 801f41ff-3f5c-4f5e-85d7-9e56ecb2c93a
            MCATagSymbol = chRs
              MCATagName = Right Surround
            MCAChannelID = 6
   RFC5646SpokenLanguage = en-GB
   SoundfieldGroupLinkID = c4c58f20-e391-443f-95ef-7e142fcbf065

060e2b34.02530101.0d010101.01016b00  len:     125 (AudioChannelLabelSubDescriptor)
             InstanceUID = 4065b7db-6a98-44c2-abc9-49a9b9df56fb
    MCALabelDictionaryID = 060e2b34.0401010d.0302010e.00000000
               MCALinkID = 9f57b39e-d2ff-4447-8fdd-1f838ca155f6
            MCATagSymbol = chHI
              MCATagName = Hearing Impaired
            MCAChannelID = 7
   RFC5646SpokenLanguage = en-GB

060e2b34.02530101.0d010101.01016b00  len:     149 (AudioChannelLabelSubDescriptor)
             InstanceUID = 1ccf48b6-718b-4dc6-a133-d016f241802d
    MCALabelDictionaryID = 060e2b34.0401010d.0302010f.00000000
               MCALinkID = c40cbd11-c302-44d4-ba4a-cd183032d904
            MCATagSymbol = chVIN
              MCATagName = Visually Impaired-Narrative
            MCAChannelID = 8
   RFC5646SpokenLanguage = en-GB