def split_timestamps(self, *timestamps, link=False): """Split the output file into parts by timestamps. Parameters ---------- *timestamps : str, int, list, tuple The timestamps to split the file by. Can be passed as any combination of strs and ints, inside or outside an :obj:`Iterable` object. Any lists will be flattened. Timestamps must be ints, representing seconds, or strs in the form HH:MM:SS.nnnnnnnnn. The timestamp string requires formatting of at least M:S. link : bool, optional Determines if the split files should be linked together after splitting. Raises ------ ValueError Raised if invalid or improperly formatted timestamps are passed in for `*timestamps`. """ # check if in timestamps form ts_flat = MKVFile.flatten(timestamps) if len(ts_flat) == 0: raise ValueError('"{}" are not properly formatted timestamps'.format(timestamps)) if None in ts_flat: raise ValueError('"{}" are not properly formatted timestamps'.format(timestamps)) for ts_1, ts_2 in zip(ts_flat[:-1], ts_flat[1:]): if Timestamp(ts_1) >= Timestamp(ts_2): raise ValueError('"{}" are not properly formatted timestamps'.format(timestamps)) # build ts_string from timestamps ts_string = 'timestamps:' for ts in ts_flat: ts_string += str(Timestamp(ts)) + ',' self._split_options = ['--split', ts_string[:-1]] if link: self._split_options += '--link'
def split_timestamp_parts(self, timestamp_parts, link=False): """Split the output in parts by time parts. Parameters ---------- timestamp_parts : list, tuple An Iterable of timestamp sets. Each timestamp set should be an Iterable of an even number of timestamps or any number of timestamp pairs. The very first and last timestamps are permitted to be None. Timestamp sets containing 4 or more timestamps will output as one file containing the parts specified. link : bool, optional Determines if the split files should be linked together after splitting. Raises ------ TypeError Raised if any of the timestamp sets are not a list or tuple. ValueError Raised if `timestamp_parts` contains improperly formatted parts. """ # check if in parts form ts_flat = MKVFile.flatten(timestamp_parts) if len(timestamp_parts) == 0: raise ValueError('"{}" are not properly formatted parts'.format( timestamp_parts)) if None in ts_flat[1:-1]: raise ValueError('"{}" are not properly formatted parts'.format( timestamp_parts)) for ts_1, ts_2 in zip(ts_flat[:-1], ts_flat[1:]): if None not in (ts_1, ts_2) and Timestamp(ts_1) >= Timestamp(ts_2): raise ValueError( '"{}" are not properly formatted parts'.format( timestamp_parts)) # build ts_string from parts ts_string = 'parts:' for ts_set in timestamp_parts: # flatten set ts_set = MKVFile.flatten(ts_set) # check if in set form if not isinstance(ts_set, (list, tuple)): raise TypeError('set is not of type list or tuple') if len(ts_set) < 2 or len(ts_set) % 2 != 0: raise ValueError( '"{}" is not a properly formatted set'.format(ts_set)) # build parts from sets for index, ts in enumerate(ts_set): # check for combined split if index % 2 == 0 and index > 0: ts_string += '+' # add timestamp if not None if ts is not None: ts_string += str(Timestamp(ts)) # add ',' or '-' ts_string += '-' if index % 2 == 0 else ',' self._split_options = ['--split', ts_string[:-1]] if link: self._split_options += '--link'
def split_duration(self, duration, link=False): """Split the output file into parts by duration. Parameters ---------- duration : str, int The duration of each split file. Takes either a str formatted to HH:MM:SS.nnnnnnnnn or an integer representing the number of seconds. The duration string requires formatting of at least M:S. link : bool, optional Determines if the split files should be linked together after splitting. """ self._split_options = ['--split', 'duration:' + str(Timestamp(duration))] if link: self._split_options += '--link'