Source code for cgl.plugins.otio.tools.utils

import json
import subprocess

import cgl.plugins.alchemy.query as alc_query


FFMPEG_EXEC = alc_query.ffmpeg_path()
FFPROBE_EXEC = alc_query.ffprobe_path()

[docs] def get_nearest_rate(self, frame_rate): """Convert a float frame rate to an exact fraction Args: frame_rate (float): Frames per second """ # rates are from the sequencer display rate menu rates = ((12, 1), (15, 1), (24000, 1001), (24, 1), (25, 1), (30000, 1001), (30, 1), (48, 1), (60000, 1001), (50, 1), (60, 1), (100, 1), (120, 1), (240, 1)) nearest = None min_diff = float('inf') for i, (num, den) in enumerate(rates): valid_rate = float(num)/float(den) if frame_rate == valid_rate: return [num, den] diff = abs(frame_rate - valid_rate) if (diff >= min_diff): continue min_diff = diff nearest = [num, den] return nearest
[docs] def get_cgl_metadata(path_object): metadata = {} metadata["sequence"] = path_object.sequence metadata["shot"] = path_object.shot metadata["project"] = path_object.project metadata['entity_type'] = path_object.entity_type metadata["company"] = path_object.company metadata["major_version"] = int(path_object.major_version) metadata["minor_version"] = int(path_object.minor_version) metadata["user"] = path_object.user metadata["task"] = path_object.task metadata["variant"] = path_object.variant metadata['shot_code'] = f"{path_object.sequence}_{path_object.shot}" return metadata
[docs] def check_ffmpeg_version(): cmd= [FFMPEG_EXEC, '-show_versions', '-of', 'json'] # print(subprocess.list2cmdline(cmd)) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() if p.returncode != 0: raise subprocess.CalledProcessError( p.returncode, subprocess.list2cmdline(cmd), stderr ) data = json.loads(stdout) # it no reliable to parse the program version # check the version of libraries instead version_check = { 'libavcodec': 60.3, 'libavformat': 60.3 } for lib in data.get("library_versions", []): name = lib['name'] if name not in version_check: continue version = float(f"{lib['major']}.{lib['minor']}") if version < version_check[name]: return False return True
if __name__ == "__main__": print(check_ffmpeg_version())