def _create_item(it, context=None): context = context or {} range_to_read = it.trimmed_range() if not range_to_read: raise otio.exceptions.OTIOError("No valid range on clip: {0}.".format( str(it))) new_media = _create_media_reference(it, context) if not new_media: kind = "smptebars" if isinstance(it, otio.schema.Gap): kind = "blank" new_media = [_create_movieproc(range_to_read, kind)] try: src = commands.addSourceVerbose(new_media) except Exception as e: # Perhaps the media was missing, if so, lets load an error # source print('ERROR: {}'.format(e)) error_media = _create_movieproc(range_to_read, 'smptebars') src = commands.addSourceVerbose([error_media]) src_group = commands.nodeGroup(src) extra_commands.setUIName(src_group, str(it.name or "clip")) # Add otio metadata to this group and the source _add_metadata_to_node(it, src_group) if hasattr(it, "media_reference") and it.media_reference: _add_metadata_to_node(it.media_reference, src) in_frame = out_frame = None if hasattr(it, "media_reference") and it.media_reference: if isinstance(it.media_reference, otio.schema.ImageSequenceReference): in_frame, out_frame = \ it.media_reference.frame_range_for_time_range( range_to_read ) _add_source_bounds(it.media_reference, src, context) if not in_frame and not out_frame: # because OTIO has no global concept of FPS, the rate of the duration # is used as the rate for the range of the source. in_frame = otio.opentime.to_frames(range_to_read.start_time, rate=range_to_read.duration.rate) out_frame = otio.opentime.to_frames(range_to_read.end_time_inclusive(), rate=range_to_read.duration.rate) commands.setIntProperty(src + ".cut.in", [in_frame]) commands.setIntProperty(src + ".cut.out", [out_frame]) commands.setFloatProperty(src + ".group.fps", [float(range_to_read.duration.rate)]) return src_group
def _create_item(it, track_kind=None): range_to_read = it.trimmed_range() if not range_to_read: raise otio.exceptions.OTIOError( "No valid range on clip: {0}.".format( str(it) ) ) new_media = _create_media_reference(it, track_kind) if not new_media: kind = "smptebars" if isinstance(it, otio.schema.Gap): kind = "blank" new_media = [_create_movieproc(range_to_read, kind)] try: src = commands.addSourceVerbose(new_media) except Exception as e: # Perhaps the media was missing, if so, lets load an error # source print('ERROR: {}'.format(e)) error_media = _create_movieproc(range_to_read, 'smptebars') src = commands.addSourceVerbose([error_media]) src_group = commands.nodeGroup(src) extra_commands.setUIName(src_group, str(it.name or "clip")) # Add otio metadata to this group and the source _add_metadata_to_node(it, src_group) if hasattr(it, "media_reference") and it.media_reference: _add_metadata_to_node(it.media_reference, src) # because OTIO has no global concept of FPS, the rate of the duration is # used as the rate for the range of the source. # RationalTime.value_rescaled_to returns the time value of the object in # time rate of the argument. cut_in = range_to_read.start_time.value_rescaled_to( range_to_read.duration ) commands.setIntProperty(src + ".cut.in", [int(cut_in)]) cut_out = range_to_read.end_time_inclusive().value_rescaled_to( range_to_read.duration ) commands.setIntProperty(src + ".cut.out", [int(cut_out)]) commands.setFloatProperty(src + ".group.fps", [float(range_to_read.duration.rate)]) return src_group
def addLayer(self): """docstring for fname""" stacks = commands.nodesOfType("RVStackGroup") commands.setViewNode( stacks[0] ) layer = self._selectedRender version = self._selectedVersion sqfFil = sqf.sequenceFile( layer + '/' + version + '/' + self._selectedLayer + '.exr' ) asd = commands.addSourceVerbose( [layer + '/' + version + '/' + self._selectedLayer + '.' + str(sqfFil.start) + '-' + str(sqfFil.end) + '#.exr'], None ) assGroup = commands.nodeGroup(asd) commands.setStringProperty(assGroup + '.ui.name', [self._selectedShot.name + ' - ' + self._selectedLayer + ' - ' + version]) item = QtGui.QListWidgetItem(self._selectedShot.name + ' - ' + self._selectedLayer + ' - ' + version ) item.setCheckState( QtCore.Qt.Checked ) item.setData(32, [asd, [sqfFil, self._selectedShot, self._selectedLayer, version ]] ) self.viewLayers_lw.addItem( item )
def add_audio(self, event): """Ask the user for a file and add it as audio to the currently selected sequences.""" # The idea here is to use RVs stack to create two "tracks". The first input will be a # sequence of all the current sources, and the second the selected audio file. selected_files = commands.openMediaFileDialog(False, commands.OneExistingFile, "", "", "") # Find all the sources connected to the current sequence, and save them for later. current_sources = [] current_sequence = commands.viewNode() inputs, _ = commands.nodeConnections(current_sequence, False) for node in inputs: if commands.nodeType(node) == "RVSourceGroup": current_sources.append(node) # Create a new source for the selected file. We'll do this here to fail early # and not leave junk nodes laying around. audio_source = commands.addSourceVerbose([selected_files[0]], "") audio_group = commands.nodeGroup(audio_source) # Create a new sequence and connect the sources. We're assuming here that the current sequence # is the default sequence, which always contains all sources known to RV. We'll need our own copy # since we want to keep the audio out of our "video track". sequence = commands.newNode("RVSequenceGroup", "SequenceForAudioStack") commands.setNodeInputs(sequence, current_sources) # Create the stack and connect the two sources. stack = commands.newNode("RVStackGroup", "StackWithAudio") commands.setNodeInputs(stack, [sequence, audio_group]) # Find the actual stack node and configure it to to use the topmost # source (no compositing) and only the audio we just loaded. This should mean # that if the user selects a file containing both audio and video as the audio # source, they will still get the expected result. for node in commands.nodesInGroup(stack): if commands.nodeType(node) == "RVStack": commands.setStringProperty("%s.composite.type" % (node), ["topmost"], False) commands.setStringProperty("%s.output.chosenAudioInput" % (node), [audio_group], False) break commands.setViewNode(stack)