Script DaVinci Resolve : naviguer dans la Hiérarchie des Objets


DaVinci Resolve offre une flexibilité exceptionnelle pour personnaliser et automatiser notre flux de travail. L’une des clés de cette personnalisation réside dans l’API de scripting de DaVinci Resolve, qui permet de contrôler beaucoup d’aspects du logiciel. Cependant, pour tirer pleinement parti de cette puissante API, il est essentiel de comprendre la hiérarchie des objets afin de pouvoir naviguer entre eux et obtenir ce que l’on veut.

Découvrir la Hiérarchie des Objets : Une Exploration dans la Console

En tant que développeur, la curiosité nous pousse souvent à plonger dans les entrailles d’un logiciel pour comprendre comment il fonctionne en profondeur. Lorsque j’ai entrepris d’explorer l’API de scripting de DaVinci Resolve, j’ai rapidement compris que la clé pour maîtriser cet outil résidait dans la hiérarchie des objets.

Cette hiérarchie, telle une structure arborescente, s’étend du niveau global de l’objet « Resolve » jusqu’aux objets plus spécialisé et spécifique pour contrôlé les timeline, les items etc. Entre ces deux extrêmes, se trouvent toute une gamme d’objets qui permettent de gérer des projets, des médias, des effets, et bien plus encore. C’est comme si chaque objet avait sa propre spécialité dans l’écosystème de DaVinci Resolve et qu’il refléter une partie de fonctionnement de l’interface.

Les Objets Préchargés dans DaVinci : La Clé de la Hiérarchie

Lorsque l’on explore l’univers du scripting dans DaVinci Resolve, une première étape cruciale consiste à comprendre les objets préchargés par le logiciel. Ces objets sont déjà disponibles dans l’environnement de DaVinci Resolve et nous permettent de commencer à enquêter sur la hiérarchie des objets.

Deux fonctions essentielles sont à notre disposition pour cette exploration : print() et dir(). En utilisant ces fonctions en Python, nous pouvons obtenir une liste des objets préchargés qui sont disponibles dans notre programme. Là où cela devient vraiment intéressant, c’est que DaVinci Resolve nous place déjà dans un environnement qu’il a soigneusement conçu pour faciliter notre travail.

print(dir())

Résultat de la console :

['OrderedDict', '_UIAutoTbl', '_UIDefault', '_UIDispatcher', '_UIWindow', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_thisapp', 'app', 'bmd', 'currentProject', 'fu', 'fu_stderr', 'fu_stdout', 'fusion', 'importlib', 'pprint', 'projectManager', 'res', 'resolve', 'sys']

C’est ainsi que j’ai découvert : l’objet « Resolve ». Ce dernier sert de pilier central à l’ensemble de l’API de Scripting, offrant un accès à toutes les fonctionnalités et aux éléments du logiciel. Il existe aussi « Project » et « Project Manager », directement disponibles. Cependant, il convient de noter qu’il est préférable de ne pas les utiliser tels quels, car ils ne sont pas toujours correctement mis à jour, ce qui peut entraîner des problèmes. Nous les chargerons plutôt à partir de l’objet le plus important, « Resolve ».

Contenu de l’Objet « Resolve »

L’objet « Resolve » constitue le cœur de l’API de Scripting de DaVinci Resolve. Il offre un accès essentiel à de nombreuses fonctionnalités du logiciel. On peut très facilement lister les méthodes de cet object à l’aide de « print » et dir »:

print(dir(resolve))

Voici un aperçu des fonctions disponibles avec une description personnelle de ce que j’ai compris des différente méthode au sein de cet objet :

FonctionDescription
DeleteLayoutPresetSupprime un préréglage de disposition.
ExportBurnInPresetExporte un préréglage de texte incrusté.
ExportLayoutPresetExporte un préréglage de disposition.
ExportRenderPresetExporte un préréglage de rendu.
FusionAccès à l’objet Fusion de DaVinci Resolve.
GetCurrentPageObtient la page actuellement ouverte dans DaVinci Resolve.
GetMediaStorageObtient le stockage des médias utilisé dans le projet.
GetProductNameObtient le nom du produit (DaVinci Resolve).
GetProjectManagerObtient l’objet Project Manager.
GetVersionObtient la version de DaVinci Resolve.
GetVersionStringObtient une chaîne de version détaillée.
ImportBurnInPresetImporte un préréglage de texte incrusté.
ImportLayoutPresetImporte un préréglage de disposition.
ImportRenderPresetImporte un préréglage de rendu.
LoadLayoutPresetCharge un préréglage de disposition.
OpenPageOuvre une page spécifique dans DaVinci Resolve.
PrintAffiche des informations dans la console.
QuitQuitte DaVinci Resolve.
SaveLayoutPresetEnregistre un préréglage de disposition.
SetHighPriorityDéfinit la priorité élevée pour l’application.
UpdateLayoutPresetMet à jour un préréglage de disposition.

Ces fonctions offrent un large éventail de possibilités pour interagir avec DaVinci Resolve à travers le scripting. Elles permettent notamment de gérer des préréglages, d’accéder à des fonctionnalités spécifiques comme Fusion, d’obtenir des informations sur le projet.

On descend d’un niveau : vers Le Project Manager

Pour descendre d’un niveau dans l’objet résolve, nous allons simplement instancier l’objet Project manager grâce à l’objet résolve.

projectManager = resolve.GetProjectManager()

De cette manière, nous avons maintenant accès, grâce à cette variable, à l’ensemble des outils du Project manager. Le « Project Manager » (Gestionnaire de Projets) est un objet central dans l’écosystème de DaVinci Resolve. Son rôle principal est de gérer et de superviser l’ensemble des projets et des ressources associées au sein du logiciel. C’est grâce à cet objet que vous pourrez définir dans quel projet vous êtes. Ouvrir un autre projet, aller récupérer un élément d’un autre projet, Obtenir la liste de tous vos projets, etc.. 

Toujours grâce à la fonction print et dir on va lister les méthode de cet objet. 

print(dir(projectManager))

Et Voici la liste des méthodes obtenues avec leur description de ce que j’ai compris.

MéthodeDescription
ArchiveProjectArchive le projet actuel.
CloseProjectFerme le projet actuel.
CreateFolderCrée un dossier dans le projet actuel.
CreateProjectCrée un nouveau projet.
DeleteFolderSupprime un dossier du projet actuel.
DeleteProjectSupprime le projet actuel.
ExportProjectExporte le projet actuel.
GetCurrentDatabaseObtient la base de données actuelle.
GetCurrentFolderObtient le dossier actuel.
GetCurrentProjectObtient le projet actuel.
GetDatabaseListObtient la liste des bases de données.
GetFolderListInCurrentFolderObtient la liste des dossiers dans le dossier actuel.
GetFoldersInCurrentFolderObtient la liste des dossiers dans le dossier actuel.
GetProjectLastModifiedTimeObtient la date de dernière modification du projet actuel.
GetProjectListInCurrentFolderObtient la liste des projets dans le dossier actuel.
GetProjectsInCurrentFolderObtient la liste des projets dans le dossier actuel.
GotoParentFolderAccède au dossier parent.
GotoRootFolderAccède au dossier racine.
ImportProjectImporte un projet.
LoadProjectCharge un projet.
OpenFolderOuvre un dossier.
PrintAffiche du texte dans la console.
RestoreProjectRestaure le projet actuel.
SaveProjectEnregistre le projet actuel.
SetCurrentDatabaseDéfinit la base de données actuelle.

On descend d’un niveau suplémentaire : vers le currentProject

Pour descendre d’un niveau dans l’objet résolve, nous allons simplement instancier l’objet currentProject grâce à l’objet ProjectManager.

mediaPool = resolve.GetProjectManager().GetCurrentProject().GetMediaPool()

Le CurrentProject (Projet Actuel) est un objet essentiel dans l’écosystème de DaVinci Resolve. Il représente le projet actuellement ouvert dans le logiciel. Grâce à cet objet, vous pouvez accéder à diverses fonctionnalités liées au projet en cours de travail. Il vous permet notamment de manipuler les timelines, d’ajouter des travaux de rendu, de gérer les préréglages de rendu, d’accéder au Media Pool du projet, de travailler avec la galerie de médias, et bien plus encore. Le CurrentProject est votre porte d’entrée pour interagir avec toutes les ressources et fonctionnalités spécifiques au projet que vous éditez.

voici la liste des méthodes avec une description de ce que j’ai compris à l’aide de la commande suivante dans la console davinci :

print(dir(resolve.GetProjectManager().GetCurrentProject()))

MéthodeDescription
AddRenderJobAjoute un travail de rendu au projet actuel.
DeleteAllRenderJobsSupprime tous les travaux de rendu du projet actuel.
DeleteRenderJobSupprime un travail de rendu spécifique du projet actuel.
ExportCurrentFrameAsStillExporte l’image actuelle comme une image fixe.
GetCurrentRenderFormatAndCodecRécupère le format de rendu actuel et le codec utilisé.
GetCurrentRenderModeRécupère le mode de rendu actuel.
GetCurrentTimelineRécupère la timeline actuellement ouverte dans le projet.
GetGalleryRécupère la galerie de médias actuelle.
GetMediaPoolRécupère le Media Pool du projet actuel.
GetNameRécupère le nom du projet actuel.
GetPresetListRécupère la liste des préréglages disponibles.
GetPresetsRécupère les préréglages actuellement définis.
GetRenderCodecsRécupère la liste des codecs de rendu disponibles.
GetRenderFormatsRécupère la liste des formats de rendu disponibles.
GetRenderJobListRécupère la liste des travaux de rendu dans le projet actuel.
GetRenderJobStatusRécupère l’état d’un travail de rendu spécifique.
GetRenderJobsRécupère tous les travaux de rendu du projet actuel.
GetRenderPresetListRécupère la liste des préréglages de rendu disponibles.
GetRenderPresetsRécupère les préréglages de rendu actuellement définis.
GetRenderResolutionsRécupère la liste des résolutions de rendu disponibles.
GetSettingRécupère un paramètre de configuration spécifique du projet.
GetTimelineByIndexRécupère une timeline spécifique par son index.
GetTimelineCountRécupère le nombre total de timelines dans le projet.
GetUniqueIdRécupère un identifiant unique.
InsertAudioToCurrentTrackAtPlayheadInsère un fichier audio à la position actuelle dans la piste audio en cours.
IsRenderingInProgressVérifie si un rendu est en cours.
LoadBurnInPresetCharge un préréglage de superposition de données.
LoadRenderPresetCharge un préréglage de rendu spécifique.
RefreshLUTListActualise la liste des tables de consultation de couleur.
SaveAsNewRenderPresetEnregistre un nouveau préréglage de rendu.
SetCurrentRenderFormatAndCodecDéfinit le format de rendu et le codec à utiliser.
SetCurrentRenderModeDéfinit le mode de rendu actuel.
SetCurrentTimelineDéfinit la timeline actuellement active.
SetNameDéfinit le nom du projet actuel.
SetPresetApplique un préréglage spécifique.
SetRenderSettingsDéfinit les paramètres de rendu.
SetSettingDéfinit un paramètre de configuration spécifique du projet.
StartRenderingDémarre un travail de rendu spécifique.
StopRenderingArrête un travail de rendu en cours.

On descend encore d’un niveau : vers Media Pool

Pour descendre d’un niveau dans l’objet résolve, nous allons simplement instancier l’objet MediaPool grâce à l’objet CurrentProject.

mediaPool = resolve.GetProjectManager().GetCurrentProject().GetMediaPool()

Le Media Pool (ou Pool Média en français) est un élément essentiel de DaVinci Resolve. Il s’agit d’une bibliothèque de médias virtuels dans laquelle vous pouvez organiser, gérer et accéder à tous les éléments multimédias que vous utilisez dans vos projets. Ces éléments multimédias peuvent inclure des vidéos, des images, des clips audio, des effets spéciaux, des transitions, des titres, et bien d’autres choses.

Je vous présente la liste des méthodes avec une description de ce que j’ai compris à l’aide de la commande suivante dans la console davinci :

print(dir(resolve.GetProjectManager().GetCurrentProject().GetMediaPool()))
MéthodeDescription
AddSubFolderAjoute un sous-dossier au dossier courant du Media Pool.
AppendToTimelineAjoute des éléments du Media Pool à la timeline actuelle.
CreateEmptyTimelineCrée une nouvelle timeline vide dans le Media Pool.
CreateTimelineFromClipsCrée une timeline à partir de clips du Media Pool.
DeleteClipMattesSupprime les masques des clips sélectionnés.
DeleteClipsSupprime les clips sélectionnés du Media Pool.
DeleteFoldersSupprime les dossiers sélectionnés du Media Pool.
DeleteTimelinesSupprime les timelines sélectionnées du Media Pool.
ExportMetadataExporte les métadonnées des clips sélectionnés.
GetClipMatteListObtient la liste des masques des clips sélectionnés.
GetCurrentFolderObtient le dossier actuellement sélectionné dans le Media Pool.
GetRootFolderObtient le dossier racine du Media Pool.
GetTimelineMatteListObtient la liste des masques des clips dans une timeline.
GetUniqueIdObtient un identifiant unique.
ImportFolderFromFileImporte un dossier depuis un fichier dans le Media Pool.
ImportMediaImporte des médias dans le Media Pool.
ImportTimelineFromFileImporte une timeline depuis un fichier dans le Media Pool.
MoveClipsDéplace des clips dans le Media Pool.
MoveFoldersDéplace des dossiers dans le Media Pool.
PrintAffiche des informations sur les éléments du Media Pool.
RefreshFoldersActualise les dossiers du Media Pool.
RelinkClipsRétablit les liens vers les médias associés aux clips.
SetCurrentFolderDéfinit le dossier actuellement sélectionné dans le Media Pool.
UnlinkClipsSupprime les liens entre les clips et les médias source.

On descend encore d’un niveau : vers folder root

Pour descendre d’un niveau dans l’objet résolve, nous allons instancier l’objet folder root grâce à l’objet CurrentProject.

RootFolder = resolve.GetProjectManager().GetCurrentProject().GetMediaPool().GetRootFolder()

Le Root Folder (ou dossier racine) dans DaVinci Resolve joue un rôle essentiel dans l’organisation et la gestion des médias, des projets et des ressources au sein du logiciel. Il s’agit du point de départ de la hiérarchie des dossiers et des fichiers dans le Media Pool, ce qui en fait un élément central de la structure du projet. Le Root Folder est le premier niveau de la structure de fichiers dans le Media Pool. Tous les autres dossiers et fichiers sont organisés en dessous de lui. Vous pouvez créer des sous-dossiers et des structures hiérarchiques sous le Root Folder pour mieux organiser vos médias et vos projets.

En somme, le Root Folder agit comme un point de départ centralisé pour l’organisation et la gestion de vos ressources dans DaVinci Resolve. Il vous permet de maintenir l’ordre dans vos projets, d’accéder facilement à vos médias et de les utiliser efficacement pour vos projets de montage vidéo.

Je vous présente la liste des méthodes avec une description de ce que j’ai compris à l’aide de la commande suivante dans la console davinci :

print(dir(resolve.GetProjectManager().GetCurrentProject().GetMediaPool().GetRootFolder()))
MéthodeDescription
ExportCette méthode permet d’exporter ou de sauvegarder les éléments contenus dans le Root Folder. Cela peut inclure des clips, des dossiers ou d’autres ressources médiatiques.
GetClipListRenvoie une liste des clips présents dans le Root Folder. Cette méthode vous permet d’accéder à tous les clips qui sont directement situés dans le Root Folder.
GetClipsCette méthode est similaire à GetClipList et renvoie également une liste de clips dans le Root Folder. Elle peut être utilisée pour accéder à l’ensemble des clips.
GetIsFolderStaleCette méthode vérifie si le contenu du Root Folder est obsolète ou doit être mis à jour. Elle peut être utile pour détecter des changements dans le contenu du dossier.
GetNameRenvoie le nom du Root Folder. Vous pouvez utiliser cette méthode pour obtenir le nom du dossier racine.
GetSubFolderListRenvoie une liste des sous-dossiers contenus dans le Root Folder. Cette méthode vous permet d’accéder aux dossiers situés directement sous le Root Folder.
GetSubFoldersSimilaire à GetSubFolderList, cette méthode renvoie une liste des sous-dossiers du Root Folder, offrant une autre façon d’accéder à ces sous-dossiers.
GetUniqueIdRenvoie un identifiant unique associé au Root Folder. Cet identifiant peut être utilisé pour identifier de manière unique le dossier racine.
PrintCette méthode permet d’afficher des informations sur le Root Folder dans la console de script de DaVinci Resolve. Elle peut être utile pour le débogage et l’exploration du contenu du dossier racine.

On repart à la base de l’objet resolve pour MediaStorage

Repartons à la base de l’objet résolve pour utiliser un autre objet, le MediaStorage :

resolve.GetMediaStorage()

L’objet « MediaStorage » au sein de DaVinci Resolve joue un rôle crucial en matière de gestion des médias au sein du logiciel. Il offre un accès aux fonctionnalités liées au stockage des médias dans l’application. Grâce à MediaStorage, il est possible d’explorer, de manipuler et de contrôler les fichiers multimédias associés à un projet Resolve. Cela inclut la possibilité de rechercher des clips, de gérer les métadonnées, d’importer, d’exporter et de manipuler les média.

Je vous présente la liste des méthodes avec une description de ce que j’ai compris à l’aide de la commande suivante dans la console davinci :

print(dir(resolve.GetProjectManager().GetCurrentProject().GetMediaPool().GetRootFolder()))
MéthodeDescription
AddClipMattesToMediaPoolAjoute les mattes de clip au Media Pool.
AddItemListToMediaPoolAjoute une liste d’éléments au Media Pool.
AddItemsToMediaPoolAjoute des éléments au Media Pool.
AddTimelineMattesToMediaPoolAjoute les mattes de la timeline au Media Pool.
GetFileListRécupère la liste des fichiers du Media Pool.
GetFilesRécupère les fichiers du Media Pool.
GetMountedVolumeListRécupère la liste des volumes montés.
GetMountedVolumesRécupère les volumes montés.
GetSubFolderListRécupère la liste des sous-dossiers.
GetSubFoldersRécupère les sous-dossiers.
PrintAffiche des informations de débogage.
RevealInStorageRévèle l’emplacement dans le stockage.