Skip to main content
Known Participant
November 21, 2024

Multicam from project 1 changes when project 2 opened

  • November 21, 2024
  • 返信数 6.
  • 506 ビュー

V25 0.2 beta (also apparent in previous versions)

MacOS

 

https://drive.google.com/file/d/1RlTZldPxuyYExpCMn6OD9e5hq74Gr4i0/view?usp=drivesdk

ScreenRec of issue. Watch this first will be quicker than trying to understand the following...

 

I have a base multicam, named '1.1 MC' feeding nests that are part of a 2nd multicam ('1.2 MC'). The 2nd multicam is then edited into a sequence.

 

This is all within standalone 'project 1'

 

Project 1 is duplicated to 'Project 2' and amended slightly (3-box landscape nest is swapped for 3-box portrait, plus audio in 2.1 base multicam is slipped back 8 frames.). Multicams renamed in project 2 to '2.1 MC' and '2.2 MC'.

 

Both projects added to a production by dragging from finder and dropping on production window (individually, to avoid 'duplicate projects being created - which is potentially another bug?).

 

Fresh 'project 5' + sequence created in the production, project 1 opened and the project 1 edited sequence edited into the project 5 sequence via source monitor.

 

Project 5 sequence shows landscape 3-box and audio on 1 second points. As expected.

BUT

 

If project 2 (with portrait 3-box and slipped audio) is just OPENED the following changes happen to the other projects:

 

Project 1 muoticams are changed (names from 1.1 & 1.2 to 2.1 & 2.2, 3-box to portrait, audio slipped back 8 frames)

Project 5 sequence also has those changes.

 

If projects 1 + 2 are closed, without saving, and project 1 reopened then the project 5 sequence reverts to landscape 3-box & correct audio placement.

 

Analysis:

Seems that the multicams have some kind of UUID that is not regenerated - so within a production there are incorrect references made.

 

. 

 

Background:

Weekly zoom meeting style show recorded as isos. Main cameras are in a branded 1-box, plus extra 'super source' style 2-box, 3-box, 4-box' needed as sources.

 

Tight turnaround so

a. We start editing efitorial before all recordings are available

b. Multiple editors doing sections, 1 editor combines them in stitch.

 

返信数 6

trevor_7307作成者
Known Participant
December 19, 2024

@Bruce Bullis I realise this is a pretty niche problem but did it get added to the issue tracker? We do a weekly show where building nested multicams is a great way of working and this behaviour causes us problems.

 

I amended the (unsupported) code to duplicate the project template and have it regenerate all the ObjectUID entries and corresponding ObjectURef .

 

Seems to do the trick so far for a standalone project. I guess the danger may be if there are references to items in other projects (eg in a production). Plus the danger of messing with the workings of a project file...

 

trevor_7307作成者
Known Participant
November 22, 2024

Understandable, who knows what demons might be unleashed.

 

But it did get your attention 😬

Bruce Bullis
Legend
November 22, 2024

Adobe neither supports nor recommends direct modification of .prproj files. 

trevor_7307作成者
Known Participant
November 22, 2024

Yet to fully test but here's the code I'm using to regenerate UUIDs for MasterClips for a project to avoid collisions.
Caveat Emptor if anyone tries this...

 

I can't seem to remove the code but really, like @Bruce Bullis says, don't do this. 

 

 

import os
import sys
import re
import gzip
import pathlib
import fileinput
import uuid
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()

def handle_exceptions(exception):  # Receives an exception type and does error handling.
	if exception[0] == FileNotFoundError:
		print('Invalid file path. Check your path and file name.')
	elif exception[0] == BufferError:
		print('Buffer error... how on earth did you do this?')
	else:
		print('An unknown error occured.')
		print("Full exception: \n" + str(exception) +
			  '\nTraceback Line: ' + str(exception[-1].tb_lineno))

def regenerate(file_path):
	pattern = re.compile(r'(<MasterClip ObjectUID=")([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})(" ClassID)')
	root, ext = os.path.splitext(file_path)  # Checking if file extension is correct.
	new_name = (root + '_regenerated' + '.prproj')	
	try:
		if ext != '.prproj':
			print('Invalid filetype. Must have valid .prproj extension.')
			# If not a valid Adobe Premiere file, exit.
		elif os.path.exists(new_name):
			print('Output file already exists at this location. Please move or rename.')
		else:  # Otherwise... continue on to unzip
			with gzip.open(file_path, 'rt') as f:  # Decompress project file and open...
				file_data = f.read()  # Put file contents into variable as string text
				# loop through the MasterClip UUIDs and replace
				for m in re.finditer(pattern, file_data):
					uuid_search = m.group(2)
					# Create and convert a UUID to a string of hex digits in standard form
					uuid_replace = str(uuid.uuid4())
					
					# Replace the target string
					file_data = file_data.replace(uuid_search, uuid_replace)
			with gzip.open(new_name, 'wt') as f_out:
				f_out.write(file_data)  
	except:
		exception = sys.exc_info()
		handle_exceptions(exception[0])
	
# get filename from prompt and regenerate IDs
regenerate(filedialog.askopenfilename())



 

  

trevor_7307作成者
Known Participant
November 21, 2024
trevor_7307作成者
Known Participant
November 21, 2024

OK the workaround for this *appears* to be (no real testing yet) to open the duplicate project and replace the ObjectUID and ObjectURef for the 2x multicam sequences. 

For me that meant searching for ClassID="fb11c33a-b0a9-4465-aa94-b6d5db2628cf" to find the <Master lips> for the 2 multicams - then copy the ObjectUID and replace with random v4 UIDs generated from https://www.uuidgenerator.net/. 

 

But don't do this at home. I might try this on the next episode, but realise it's risky.