• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Could i decompress it using a SDK fuction?

New Here ,
Jun 15, 2011 Jun 15, 2011

Copy link to clipboard

Copied

I'm managing to create a Title Create tool,
I start with study the codes in .prproj,and I found the title prefs was compressed as code like below
could i decompress it using a SDK fuction?or there is an other way?

codes:

<ImporterPrefs Encoding="base64" Checksum="69363306">AQAAAAAAAACAgAAAAAAAAENvbXByZXNzZWRUaXRsZQB4nO0da1MbOVI/xbXf
iR+ADVVabxEet9SRkMJsEn9KGWOI74zts00C++Pvth/S6D02hODx3hQFzPRD
akndrZ7WjPS//0rxm3gQd2IkKuKbGIiZmIuhmIix+FX8IurijajB/wpgxqIP
8GvAjsUtYf8Ql+JEbAFVk2h+E20hxQHQTMQVcHwRF3A1EYsAfgmlLKDOAWE+
OvW2RQPqrIk9+G3BbwMoqgGNFO+oZL7/IjqAX9A9Sjcnig9QQ088AvYEqGbi
O9zNQIo20M3EPXBgyWkqCaUu6G4BWF1PH+4H1B9tcQPYEdTGJS2jRolmWb+M
4KcN7WMZfLgUx1DWnKCnxM2UPhTpxiAt1ngDP/kS5tOifBOgXUQlDDG2jOfQ
n4uIlBqO0OUjVs3REmzvnOQdEn4mzmjcJlTDHPTvY1J/kd+m9u+PqT8GUPqC
6rkBeLy8X1S7Df0llDIlGXXbYzjELKvRl+oIar6jsdEyxGRqKJmm4jOM0in8
PYZSOgBrkSVhzSEO6btwfSreAwwhu0DfVNQuBmk74hBG/hh+3sMYXVBr34h9
6JEduGqKbcUZ0kkY3RlI+x1a9JXaNFPt1ras8RcAuQUabDnej6nMZdx+z4a9
5vfrAekd6xHeD5T2dYAGx8To3QHV1iMs3t8oHX8D7cZ6DUzC3wm038ZqiKS6
uGW63xBvQyXIMiG5JiC9TeXC2c/kyamxB1YvpdtRg3HPa4nG57Vld8XW7C5p
T0ri6kqj9xZo+uLfSl/uydPF7GVH2UsHZO0BDeIvqPUDqhPnObRY1Ot9mIVY
wnxaCX4u9LbnSvemAEUvp33dBdzjf+Qc05xzR3x2K9ma0nyIj7UYMUckYQ8g
I+DFWekx86LplraozHjrqrllurhLuHsgOxxk/nrq2GtahuYTZFhezz8A1gPY
V4D1YTSuxL+U73BLYv0ZUP8dEofx23PxH6DqkSwoQ5xKQskTGiUNO4SSJ6QJ
OCZmfLCMfNqwrHP6O15ajqFDK0fMQHyC/9fkO9uZpYcYCRo4JFvCWXWo7jRH
HCfBJw9JlreA+xOu2dJ8K0hRSas1h2QFY8KdAM2IdItHZhs08w1IUnmhK/ZV
q9QsQVdGpFVTGpvXlnL12pH6adqureeQPBuOUIzK9k567uhlzwA64vGh7P0f
yErGJBfO375exGlQqyYUf39S7XGj9RAryXrQD2IvnSntnkOs49eYpkuV0V2x
jK56whnRHDhW8QdaiZ5XObYN8ZKeGa4oNsb5xfasn1Rbef5NUUmyySmV3Sfb
vCTaDs0f/WxU6vRUhWWtRp8q13g9u23LaHU7tba6d76esW6833Dtszmfp3vL
Syg178c0L65pV1lvF0MH/Rm11MK/mxam9G2uSh2rUjZP/8o5eDN00Ne06oox
Yv5zWDwvp5/B83krkSdB5uZnRV0Gt69Df/vKaobwrDGguLypetzAsB8exO9w
bTIW21mew8cw9T9JCpOHdWFob5zx1D3YoThc51nY2tIUq9s11ttRz5/Y/y1L
bhvuU8byEzEKzTcir7Bw2mtDme4PeobCXjCaE9YRo2J++xnUHgH32ZS52N5D
X2DjJGCH8KSJGerrTHYXxjSnpP1sKzadC2faG9L3EfjmHnmNNlDdKUtdZJwh
leaeUJ+dEByf2x6XlpTH4ZZqeyG0lluSAvMVfmmuv7IxxkPsBly297ihXulR
LuCW/OIj8aCN7dFaDeaDG1kZIS17ldBeq0s8wSo0OoerW+nfV6Cvjyz/0cry
gJrirbLQPI+1sPqqpn5Ya00/TSmbM8wkO6JcJ+ppL8tn6bz8ckqTy+EnfPQG
euaK2UKMTtLaDbeSfaqb9QuxkspGCTCfjvgJrWzhTL2V2UuKIsXdtWwthUdZ
OduK8cgXuJuQl+RZnnMt2qPn00kakRlhxsqqF6SHuvfj2Kd5nGMYsSvy6yNq
y9cssuioGeeCbDL0jU/hxLU5nQ3mLHSPPIexT9ZetDper8un1uuVruYj/IS0
5zaT5UyNUMwqdpVV+DzuHBybgXkFEus0c4wLk4Kz3SPLXmyIpBmaVyX9nrUx
kuQ/Js8xUDPRdZbRR90JpXdLezo/ZpN9qOl79pB5FGg/Lu6c+saXLEUlKZZj
C/tdzXw4dj5/ior7fkwrNT3LC9ezUQhxqTrttZNT1X8P5H8a4H92KJJr0fVu
jkypUuzVFcS9g+sHknQbNPbn/XXXZ+yaERPTiHwbKS0kXEnfRAtpghZjRLS3
QZayS1r9s/6+tqXUV7CVLejN3Ve1FzuHViRrseVal620NsZWaqDPP/L7dFsI
oToe42cXI39enFZPvvNQ8SLF96ANd+r9KvvtonnA2faicBvD0WUM/nQJttcu
wc7aJdhduwTNtUvQWrsEe2uXYH/tEtSz9ynXKUO9ADKs3zPWc30j53f2X0mS
9fvIeq6X3LHWXn62JFu5+unm3X6+tdYKYbEoRRGstkZfFBRDjvVHNixHEWy3
Rm8aF0OO9cc6LMf6I566+hKnGHIUI/opRgRUK0gUVCtIJFRbKRpqvqI0xfCq
+VHRc+Rw4XY2wl5R8u/nQRtCSN66a19JgPj4VwNxCkl9g7m2e4K7+sBZ2jiF
pO8dR7Qyee6sRddUfXGs29P8VoWdZQuxkjKQQ2flz+QxYzibg7N07jpBCovv
3PNKIH/Pdyn4qx79Fkkc63O9FfYXPI0or0tjSjgIVixiGElajN+jjmhtkt87
sVfO03hT1yHoXj9al43ht/x7tGaMq6e2DuuRTuFNXSbXuqVWyUKMpHf4WWf0
2w8VMczyjqjvem5BTby25Narzbd0PbD00Ibwm6v3Tj/pewk1YO5xluHMPd6F
sq0mcX3jJG5snMTbGyfxjidxg96XSUtt8CnJDcWPSm+8Y+iN4jjbHxkv7Hsi
2z8baOybVZ8z/l2rwX+gN53CN0hiFDZf2L44zm0fzk9TNQf5LTQ4nwd7zX17
MY23eTGC0O9aplpn09i872gW5S8i7Tk2TsEzM+tW7H1IH+vHOi8Vr7SeEa/o
t8yKGKmUccomxiluTUWMUvDJslVGKhsl8eZHKuuWuIxOyuhkndHJ3qtFJzuv
Ep2UeZQyPlm3Ty9jkyJIvPmxSZlFKeOUMk6x32x6zqrPfhmtlNFKGa2U0Uqh
JS6jlTJaKaOVv0O0Yt48fk600iyjlTJaKXC00qCv7PK8vManvbymKCOXMnIp
I5cycikjl5eJXFyIu18bRxIxWCzG0d8iPD9SceF6PyuN118qhSX4lBzz4Lyl
906y98kxcU+KQtK48lknC7I5lzLc2yKfGr9uv6cogiUcKcvwy0lR2fz663df
Q+IUqCF9qmMgPlstrCv9iOFcnhitS9PNKbebKLcbpWUdGGa12O2z4YbK33vU
hkvBOzbhTo5h2+M4l6cD8CsLWws4fQpfhz/TTmQjGpH4GqhLYdcf9msc5/Is
kzmk8GXuLpW568nsYs2uISGn2csAJZqS5+lkGmC3M8T59RxkVN9Ai3CnxcdE
rXFKO5qP4f24Pl6GG1VfqrnWt+wUld+m+B6MIQXuPoE9yfPeXMUCi6z9KSzi
XE/+cr49/0uJ0reXvr307aVvL337Jvr2/PXQ0reXvr307aVvL3376/p2H8aZ
mjPwJLfkx5jGvecT5Eyux9zj3RH123f6atycIheD6ppjMHMaAOdW9R2eYToR
U+VxH6Ozkd7B4emn7HzIfLfJOKLO7tMZn7ibY13ln1iTH2lOwT3J8eTBhsLp
Pchjpdn5UCyD9zXHsxz31exkl7wDmD34u+2Ua5eB9oGZNzfL6EOLcXLLj5wW
8v9ydkY1R9ddS2BenVnFa3eXhBgsxc02p8crdf5rReCZufq8N73PfZ0w04xj
LnjHUZcC69H7f7vtGpKG5O37jWc1mL3DccWjTufXtdQe1y5e0im07Ku2gaKu
rItzCwa3fF/jb5mEPBPpfvJ1Nk0nnR47i9pqHgXi83oNKY5pvXekfA3y2afy
Gd1iy8ISV+WIn3PTV1coB5YWo0GduiD7m2VtOYCWHIJGsG76WElRyZh6ACF4
KgfLybZ8rXR3JvgUC6w9dUbrapQVVSNG7fckt9a5iuU5OB53z3OoZCPsY5sK
+zk7tYXbp1e0GadPuU7R6BEPz3DxKatKR16u7xY0F9vngIzVtaktpKkGPsSF
urN5NTrzm1Up9vv3Qp8xY+4r4ja79r3LlPqgDzVdwi/OSOHOwSGFJJvqKX9s
okgfKh0bwbrxJHssHWc+4wd1HxmZ+T7duqoXP1WD+Opjdpr2iXrGCd/vyduP
90Zx+RZXTWKwxw6zuFWfJeBDNR1rmfuU7mIQkpad8aaV7knMDDkV+eeyt5Uv
Mue649PwhPj/Au9BvUU=</ImporterPrefs>

TOPICS
SDK

Views

2.8K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Adobe Employee , Nov 19, 2014 Nov 19, 2014

> What the problem for give us the hashing format ?

Adobe does not support or recommend parsing .prproj files for data. Instead, PPro provides numerous APIs for working with that data.

Votes

Translate

Translate
Adobe Employee ,
Jun 17, 2011 Jun 17, 2011

Copy link to clipboard

Copied

Hi there,

If you are building a tool that creates titles and saves them to a format Premiere Pro understands, you could use the PRTL file format.  To generate sample files in this format, just create the titles in Premiere Pro.  Then in the Project panel, select the titles you want to save to the PRTL format, and choose File > Export > Title.  The PRTL are not base64-encoded, and are easily readable in an XML editor.  Using these sample files as a guide, you could create a tool that generates the same format, so that the files can be imported into Premiere Pro.

To answer your original question: no, there is no SDK function to decompress base64-encoded data.  You'd need to provide your own function for that.

Regards,

Zac

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Nov 17, 2014 Nov 17, 2014

Copy link to clipboard

Copied

Hi,

Well, you (adobe) compresse the title definition with base64, add a binaryHash, but doesn't give acces to the hashing format ???

I (and i'm not the only person) search to play with an title already in a prproj file. change title, change police, change size...all title parameter.

Not with the export title option but with script for automation.

I parse the prproj/xml file (ungzip), with python I found the title "Media", I decompresse, decode, utf-16 etc...

I change my title and recollapse my xml title.

Now, Adobe block me for editing the BinaryHash ??

You don't provide any reference for playing with jsx, C++ pluggin is little too big for me and i'm not sur you give a big control for all the premierepro function.

What the problem for give us the hashing format ? Explain me please I don't understand !

Regards

Ian.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Nov 19, 2014 Nov 19, 2014

Copy link to clipboard

Copied

> What the problem for give us the hashing format ?

Adobe does not support or recommend parsing .prproj files for data. Instead, PPro provides numerous APIs for working with that data.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 14, 2017 Apr 14, 2017

Copy link to clipboard

Copied

Here it is base64 packed with ZLib.

You can convert this base64 to binary.

Then make offset 32 mbyte.

And then decode it with Offzip 0.4

Luigi Auriemma

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Sep 11, 2018 Sep 11, 2018

Copy link to clipboard

Copied

It can be done with autohotkey 32 bit and zlib1.dll.

http://zlib.net/zlib128-dll.zip

In variable "var" there is base64 premiere legacy title "Hello world!".

Script decode, unpack, change title to "Hello adobe!", then pack and encode.

If You replace any base64 title in Your xml project with the title, that generates this script, then You will see new title when open project.

var := "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"

size := StringBase64ToData(var, outData)

offset := 32, OriginalSize := size*100

VarSetCapacity(var1, offset, 0)

DllCall("Ntdll\RtlMoveMemory", Ptr, &var1, Ptr, &outData, Ptr, offset)

VarSetCapacity(var2, size-offset, 0)

DllCall("Ntdll\RtlMoveMemory", Ptr, &var2, Ptr, &outData+offset, Ptr, size-offset)

zlib_Decompress(Decompressed, var2, size-offset, OriginalSize)

DecompressedData := StrGet(&Decompressed, "UTF-16")

DecompressedData := StrReplace(DecompressedData, "Hello world!", "Hello adobe!")

DecompressedSize := VarSetCapacity(DecompressedData, -1)

CompressedSize := zlib_Compress(Compressed, DecompressedData, DecompressedSize)

VarSetCapacity(var3, CompressedSize+offset, 0)

DllCall("Ntdll\RtlMoveMemory", Ptr, &var3, Ptr, &var1, Ptr, offset)

DllCall("Ntdll\RtlMoveMemory", Ptr, &var3+offset, Ptr, &Compressed, Ptr, CompressedSize)

msgbox % Base64Enc(var3, CompressedSize+offset)

return

Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017

   Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000

   DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr", &Bin ,"UInt", nBytes, "UInt",0x1|0x40000000, "Ptr",0,"UIntP",Rqd )

   VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )

   DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr",&Bin, "UInt",nBytes, "UInt",0x1|0x40000000, "Str",B64, "UIntP",Rqd )

   Return B64

}

StringBase64ToData(stringBase64, ByRef outData)

{

   static CRYPT := CRYPT_STRING_BASE64 := 1

   DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)

   VarSetCapacity(outData, bytes, 0)

   DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)

   Return bytes

}

; ===================================== zlib.ahk =====================================

; by shajul -- http://www.autohotkey.com/board/topic/63343-zlib/

; Download zlib1.dll -- http://zlib.net/zlib128-dll.zip

zlib_Compress(Byref Compressed, Byref Data, DataLen, level = -1) {

    nSize := DllCall("zlib1\compressBound", "UInt", DataLen, "Cdecl")

    VarSetCapacity(Compressed,nSize, 0)

    ErrorLevel := DllCall("zlib1\compress2", "ptr", &Compressed, "UIntP", nSize, "ptr", &Data, "UInt", DataLen, "Int"

                   , level    ;level 0 (no compression), 1 (best speed) - 9 (best compression)

                   , "Cdecl") ;0 means Z_OK

    return ErrorLevel ? 0 : nSize

} ;http://www.autohotkey.com/forum/viewtopic.php?t=68170

zlib_Decompress(Byref Decompressed, Byref CompressedData, DataLen, OriginalSize = -1) {

    OriginalSize := (OriginalSize > 0) ? OriginalSize : DataLen*10 ;should be large enough for most cases

    VarSetCapacity(Decompressed,OriginalSize, 0)

    ErrorLevel := DllCall("zlib1\uncompress", "Ptr", &Decompressed, "UIntP", OriginalSize, "Ptr", &CompressedData, "UInt", DataLen)

    return ErrorLevel ? 0 : OriginalSize

} ;http://www.autohotkey.com/forum/viewtopic.php?t=68170

/*

Return codes for the compression/decompression functions. Negative values are errors, positive values are used for special but normal events.

#define Z_OK            0

#define Z_STREAM_END    1

#define Z_NEED_DICT     2

#define Z_ERRNO        (-1)

#define Z_STREAM_ERROR (-2)

#define Z_DATA_ERROR   (-3)

#define Z_MEM_ERROR    (-4)

#define Z_BUF_ERROR    (-5)

#define Z_VERSION_ERROR (-6)

Compression levels.

#define Z_NO_COMPRESSION         0

#define Z_BEST_SPEED             1

#define Z_BEST_COMPRESSION       9

#define Z_DEFAULT_COMPRESSION  (-1)

*/

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 11, 2019 Jul 11, 2019

Copy link to clipboard

Copied

I tried to figure out what might be wrong with a premiere project file. But in the end I came up with a utilty script to just print some useful details like this:

But I have no idea how to convert those Start / End numbers into meaningful values.  They surely not milliseconds - the whole thing was only 15 seconds long!

Processing Premiere Project file: premiere-test.prproj.xml
>> PremiereData   Attributes: [Version:3]
   Track 0 Start: 0 End: 3820400640000 Name: Color Matte
   Track 1 Start: 0 End: 518192640000 Name: IMG_6102.JPG
   Track 1 Start: 518192640000 End: 1534256640000 Name: IMG_5890.JPG
   Track 1 Start: 1534256640000 End: 3180280320000 Name: images.jpg
   Track 1 Start: 3180280320000 End: 3820400640000 Name: IMG_6102.JPG
   Track 2 Start: 0 End: 518192640000 Name: IMG_6102.JPG
   Track 2 Start: 518192640000 End: 1534256640000 Name: IMG_5890.JPG
   Track 3 Start: 0 End: 518192640000 Name: Title 01
   Track 3 Start: 518192640000 End: 1534256640000 Name: Title 04
   Track 3 Start: 1534256640000 End: 3180280320000 Name: Title 05
   Track 3 Start: 3180280320000 End: 3820400640000 Name: Title 06

 

Media File: IMG_6102.JPG / E:\FilmClub\Adverts\opticians 2018\IMG_6102.JPG : [Version:19, ObjectUID:11b0dd6f-04d2-4ce1-936d-d6a8e963df17, Index:4294967295, ClassID:7a5c103e-f3ac-4391-b6b4-7cc3d2f9a7ff]

Media File: IMG_5890.JPG / \\?\E:\FilmClub\Adverts\opticians 2018\IMG_5890.JPG : [Version:19, ObjectUID:2752e137-5936-43e0-8001-f71012de67dc, Index:4294967295, ClassID:7a5c103e-f3ac-4391-b6b4-7cc3d2f9a7ff]

Adobe Title Version: 20080702 Media Atr: [Version:19, ObjectUID:38dfebd5-26c6-4f16-aab4-5f08de1b4c5e, Index:4294967295, ClassID:7a5c103e-f3ac-4391-b6b4-7cc3d2f9a7ff]
  Font: NuevaStd-BoldCond / Nueva Std
  Font: NuevaStd-Cond / Nueva Std
  Font: NuevaStd-Cond / Nueva Std
=== TITLE START ===
SERVICE YOU CAN TRUST
THE COMPLETE HEARING SERVICE
ò EARWAX REMOVAL
ò DIGITAL HEARING AIDS
ò HEARING PROTECTION
ò SWIM AND SLEEP MOULDS
ò SERVICE AND REPAIR
=== TITLE END ===

Save with name "prprojReader.groovy", install Apache Groovy (and a java) and just run it!

import java.util.zip.Inflater
import java.nio.*
import groovy.xml.*

def cli = new CliBuilder(usage:'prProjReader.groovy <premiere project file.prproj>',
  header:'Extract key data from the project.',
  footer: 'MGB 2019')

def options = cli.parse(args)

if (options.arguments().size == 0) {
    cli.usage()
    return 0
    //System.exit(1)
}
def theXml = new File(options.arguments()[0])
if (! theXml.isFile()) {
    println "${theXml} is not a valid file path."
    return 2
}

// An xml parser used later when extracting text from embedded Titles.
// I use extra settings here just to show how to refine the parser, but should work with defaults only too.
def tx = new XmlParser(false,true,true)
tx.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false)
tx.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
// The xml parser used for the main project file..
def pr = new XmlSlurper()
def prx = pr.parse(theXml)
def pp = new groovy.util.XmlNodePrinter()  // if needed - a 'pretty printer' to output formatted XML

// Titles are held as a huge Base64 encoded string - but when decoded we find they are still gibberish.
// But if we use the inflater feature (which uses an image comression algorithm rather than straight unzip)
// we find the title is wrapped in another mass of XML (in unicode).  Note that we start the inflation from byte 32, in chunks.
String decompress2(byte[] compressed) {
         // Decompress the bytes
     if (compressed.length <= 32)
         return new String(compressed);
     xmlout = new ByteArrayOutputStream (10000)
     Inflater decompresser = new Inflater();
     decompresser.setInput(compressed, 32, compressed.length - 32);
     do {
         byte[] result = new byte[1000];
         int resultLength = decompresser.inflate(result);
         xmlout.write(result, 0, resultLength)
     } while (!decompresser.finished())
     finalSize = decompresser.bytesWritten
     //println "   Final Length = $finalSize"

     decompresser.end();
     return new String(xmlout.toByteArray(), 0, finalSize as Integer, "unicode")
}

println "Processing Premiere Project file: ${theXml.name}"
println " >> ${prx.name()}   Attributes: ${prx.attributes()}"

if (prx.name() != "PremiereData") {
println "This xml file does not look like a Premiere Project file.  It is likely to error or not output anything here..."
}
println ""
// first, print the content of each video track
projData = prx.'**'.findAll { it.name() == 'VideoClipTrackItem' }
projData.each { vnode ->
  try{
  ti = vnode.ClipTrackItem.TrackItem
  print "   Track ${ti.TrackIndex.text()} Start: ${ti['Start'].text()} End: ${ti['End'].text()}"
  obj = vnode.ClipTrackItem.SubClip.@ObjectRef

  sc = vnode.parent().'**'.find {it.name() == "SubClip" && it.@ObjectID == obj}
  if (sc) {
   println " Name: ${sc['Name'].text()}"
  } else {
   println " no name"
  }

} catch (  x  ) {
  println x
}
}

//Now print the Titles extracted from those compressed Base64 unicode xml parts (together with the fonts used)!
projData = prx.'**'.findAll { (it.name() == 'Media') && (it['Title'] != "")}
projData.each { mediaNode ->
println ""
  try {
    b64 = mediaNode.'**'.find { it.@Encoding == 'base64' }
    if (b64 && b64.name() == "ImporterPrefs") {
    bdat = (b64.toString()).decodeBase64()
        itemData = decompress2 (bdat)
        if (itemData.size() > 32) {
     txml = tx.parseText( itemData )
     println "Adobe Title Version: ${txml.Adobe_Title.Version.text()} Media Atr: ${mediaNode.attributes()}"
     txtml = txml.'**'.findAll {txtN -> txtN.name() == 'TypeSpec'}
     txtml.each { txtfont ->
      println "  Font: ${txtfont['fifullName'].text()} / ${txtfont.fifontFamilyName.text()}"
     }
     println "=== TITLE START ==="
     txtml = txml.'**'.findAll {txtN -> txtN.name() == 'TRString'}
     txtml.each {println it.text()
       //pp.print it.parent().parent()
       //println it.parent().attributes()
       }
     println "=== TITLE END ==="
    } else {
      println "  Short of Data"
    }
  } else {
   println ("  Media File: ${mediaNode['Title'].text()} / ${mediaNode['ActualMediaFilePath'].text()} : ${mediaNode.attributes()}")
  }
} catch (  x  ) {
  println x
}
}
//println XmlUtil.serialize(prx)
return

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 11, 2019 Jul 11, 2019

Copy link to clipboard

Copied

As I remember If You want to get number of frames You have to divide "Start / End numbers" on "<framerate>...</framerate> number".

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Jul 11, 2019 Jul 11, 2019

Copy link to clipboard

Copied

Emphatically, Adobe neither supports nor recommends parsing .prproj files directly, and definitely not modifying them. Use our APIs, or PPro's UI, to make any such changes.

Also, those numbers are in 'ticks'; there are 254016000000 ticks per second.254016000000LL

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 11, 2019 Jul 11, 2019

Copy link to clipboard

Copied

"Also, those numbers are in 'ticks'; there are 254016000000 ticks per second."
Thank you very much.
I have Vegas Pro that is meant to be able import prproj files (though it errored for some) - I do not currently have premiere or any of those other tools, but a colleague has given me some old project files as a base to start new material.  At least I can now get the most basic track and sequence information, which is roughly all I need for now.

Cheers,

Merlin

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Jul 11, 2019 Jul 11, 2019

Copy link to clipboard

Copied

If it's not a huge number of .prproj files, perhaps you could convince someone to open them, and export them as FCP XML...?

[If it's less than 20, I could do it during lunch. ]

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Feb 09, 2021 Feb 09, 2021

Copy link to clipboard

Copied

LATEST

Thank you verry much !

Your code saved me time!

Do you have the reverse function "compress2": compress data?

 

Have a good day

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines