Script : Manipuler les timelines dans DaVinci Resolve


Les timelines sont des éléments essentiels de tout projet vidéo dans DaVinci Resolve. Dans cette série de scripts (en travaux), nous explorerons comment interagir avec les timelines pour automatiser des tâches de montage et de gestion de projet. Que vous souhaitiez sélectionner une timeline actuelle, choisir une timeline spécifique, lister les items (clips et effets) sur une timeline ou ajouter de nouveaux éléments, ces scripts vous guideront à travers les étapes pour manipuler efficacement les timelines dans votre projet.

Les méthodes disponibles avec un objet timeline

Avant de plonger dans la façon de récupérer et de manipuler les objets timeline dans DaVinci Resolve, prenons un moment pour explorer les nombreuses méthodes disponibles pour travailler avec ces objets. Une timeline est un élément central de tout projet vidéo, et ces méthodes vous permettront d’accomplir une variété de tâches d’édition, de gestion et d’automatisation. Voici un tableau des méthodes associées à un objet timeline :

MéthodeDescription
AddMarkerAjoute un repère (marker) à la timeline.
AddTrackAjoute une nouvelle piste à la timeline.
ApplyGradeFromDRXApplique une correction colorimétrique à partir d’un fichier DRX.
CreateCompoundClipCrée un clip composé dans la timeline.
CreateFusionClipCrée un clip Fusion dans la timeline.
CreateSubtitlesFromAudioCrée des sous-titres à partir de l’audio de la timeline.
DeleteClipsSupprime des clips de la timeline.
DeleteMarkerAtFrameSupprime un repère à un moment spécifique dans la timeline.
DeleteMarkerByCustomDataSupprime un repère en fonction de données personnalisées.
DeleteMarkersByColorSupprime des repères en fonction de leur couleur.
DeleteTrackSupprime une piste de la timeline.
DetectSceneCutsDétecte les coupures de scène dans la timeline.
DuplicateTimelineDuplique la timeline actuelle.
ExportExporte la timeline vers un fichier ou une destination spécifiée.
GetCurrentClipThumbnailImageObtient l’image miniature du clip actuellement sélectionné.
GetCurrentTimecodeObtient le timecode actuel de la timeline.
GetCurrentVideoItemObtient l’élément vidéo actuellement sélectionné dans la timeline.
GetEndFrameObtient le numéro de frame de fin de la timeline.
GetIsTrackEnabledVérifie si une piste est activée dans la timeline.
GetIsTrackLockedVérifie si une piste est verrouillée dans la timeline.
GetItemListInTrackObtient la liste des éléments dans une piste spécifique.
GetItemsInTrackObtient les éléments (clips, effets, etc.) dans une piste spécifique.
GetMarkerByCustomDataObtient un repère en fonction de données personnalisées.
GetMarkerCustomDataObtient les données personnalisées d’un repère.
GetMarkersObtient la liste des repères dans la timeline.
GetNameObtient le nom de la timeline.
GetSettingObtient une valeur de paramètre spécifique de la timeline.
GetStartFrameObtient le numéro de frame de début de la timeline.
GetStartTimecodeObtient le timecode de début de la timeline.
GetTrackCountObtient le nombre de pistes dans la timeline.
GetTrackNameObtient le nom d’une piste spécifique dans la timeline.
GetUniqueIdObtient un identifiant unique pour la timeline.
GrabAllStillsCapture toutes les images fixes de la timeline.
GrabStillCapture une image fixe à un moment spécifique dans la timeline.
ImportIntoTimelineImporte des éléments dans la timeline depuis le média pool.
InsertFusionCompositionIntoTimelineInsère une composition Fusion dans la timeline.
InsertFusionGeneratorIntoTimelineInsère un générateur Fusion dans la timeline.
InsertFusionTitleIntoTimelineInsère un titre Fusion dans la timeline.
InsertGeneratorIntoTimelineInsère un générateur dans la timeline.
InsertOFXGeneratorIntoTimelineInsère un générateur OFX dans la timeline.
InsertTitleIntoTimelineInsère un titre dans la timeline.
PrintAffiche des informations sur la timeline dans la console.
SetClipsLinkedDéfinit si les clips de la timeline sont liés ou non.
SetCurrentTimecodeDéfinit le timecode actuel de la timeline.
SetNameDéfinit le nom de la timeline.
SetSettingDéfinit une valeur de paramètre spécifique de la timeline.
SetStartTimecodeDéfinit le timecode de début de la timeline.
SetTrackEnableActive ou désactive une piste dans la timeline.
SetTrackLockVerrouille ou déverrouille une piste dans la timeline.
SetTrackNameDéfinit le nom d’une piste spécifique dans la timeline.
UpdateMarkerCustomDataMet à jour les données personnalisées d’un repère dans la timeline.

Ce tableau offre un aperçu complet des méthodes disponibles pour interagir avec les timelines dans DaVinci Resolve. Chaque méthode peut être utilisée pour des tâches spécifiques, de la création de clips composites à l’exportation de la timeline complète. Dans les sections suivantes, nous explorerons en détail comment obtenir la timeline que l’on veut pour utiliser ses divers méthodes afin d’automatiser diverses opérations d’édition.

Sélectionner la timeline actuelle

Pour sélectionner la timeline actuelle dans DaVinci Resolve, notre objectif est de récupérer l’objet « timeline » actuel. Cela nous permettra d’accéder à de nombreuses méthodes et fonctionnalités pour travailler sur cette timeline. Une fois que nous aurons obtenu cet objet, nous pourrons effectuer diverses opérations de montage, d’ajout d’éléments, de modification, etc. Il est donc essentiel de savoir comment récupérer cette timeline actuelle pour pouvoir automatiser des tâches de montage ou d’édition de manière efficace.

projectManager = resolve.GetProjectManager()
timeline_current = project.GetCurrentTimeline()
print(timeline_current.GetName())

Sélectionner une timeline par son nom

La sélection d’une timeline par son nom est un peu plus complexe, mais tout à fait réalisable grâce à l’API de DaVinci Resolve. Pour ce faire, nous devons d’abord récupérer la liste de toutes les timelines disponibles dans le projet en cours. Ensuite, nous parcourons cette liste en utilisant une boucle pour vérifier chaque timeline par rapport au nom que nous avons spécifié. Lorsque nous trouvons une correspondance, nous pouvons récupérer l’objet « timeline » correspondant à ce nom.

Cette approche nous permet de sélectionner de manière précise une timeline spécifique parmi plusieurs, en fonction de son nom. Une fois que nous avons obtenu l’objet « timeline » souhaité, nous pouvons l’utiliser pour effectuer diverses opérations de montage et d’édition selon nos besoins.

projectManager = resolve.GetProjectManager()
project = projectManager.GetCurrentProject()

timeline_name = "Timeline 1"
timeline_count = project.GetTimelineCount()
timeline_finded = None

for i in range(1, timeline_count+1):
    timeline = project.GetTimelineByIndex(i)
    if timeline.GetName() == timeline_name:
        timeline_finded = timeline
        break

print(timeline.GetName())

Lister les items d’une timeline

Lorsque vous travaillez sur des projets vidéo complexes, il est essentiel de pouvoir explorer le contenu de vos timelines. Dans cette section, nous allons voir comment lister tous les items, tels que les clips qui composent une timeline spécifique.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

def timecode_to_frame(timecodeStart, timecode, framerate):
    s_heures, s_minutes, s_secondes, s_images = map(int, timecodeStart.split(':'))
    heures, minutes, secondes, images = map(int, timecode.split(':'))
    total_frames = ((heures-s_heures) * 3600 + (minutes-s_minutes) * 60 + (secondes-s_secondes)) * framerate + (images-s_images)
    return total_frames

Obtenir le timecode actuel de la timeline (notre curseur)

L’objectif ici est de récupérer le timecode du curseur à l’endroit précis où il se trouve dans la timeline. Le timecode représente l’heure, les minutes, les secondes et les images de la position actuelle du curseur. En obtenant cette information, nous pouvons automatiser des tâches qui dépendent du moment précis dans la timeline. Cela peut être utile pour ajouter des marqueurs, enregistrer des informations de repère, ou même pour des opérations de montage basées sur le temps.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

print(timeline.GetCurrentTimecode())

Obtenir le numéro de frame actuel de la timeline (notre curseur)

Obtenir le numéro de frame actuel de la timeline à l’emplacement du curseur est un peu plus complexe. Pour ce faire, nous devons convertir le timecode de notre curseur en nombre de frames parcourues. Pour effectuer cette conversion, nous devons d’abord connaître le nombre de frames par seconde (FPS) de notre projet. Ensuite, en fonction du timecode (heure, minutes, secondes et images par seconde), nous pouvons calculer le nombre total de frames parcourues jusqu’à cet instant. Cela nous permet de connaître précisément la position de notre curseur en termes de frames, ce qui peut être crucial pour des opérations de montage et d’édition basées sur le nombre d’images.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

def timecode_to_frame(timecodeStart, timecode, framerate):
    s_heures, s_minutes, s_secondes, s_images = map(int, timecodeStart.split(':'))
    heures, minutes, secondes, images = map(int, timecode.split(':'))
    total_frames = ((heures-s_heures) * 3600 + (minutes-s_minutes) * 60 + (secondes-s_secondes)) * framerate + (images-s_images)
    return total_frames

timecodeStart = timeline.GetStartTimecode()
timecode = timeline.GetCurrentTimecode()
fps = timeline.GetSetting("timelineFrameRate")

print(timecode_to_frame(timecodeStart, timecode, fps))

Ajouter un marker à une frame précise

La méthode AddMarker permet d’ajouter un marqueur à une frame précise dans la timeline. Elle prend en compte plusieurs arguments, tels que la couleur, le nom, la note et la durée du marqueur. Notez que la durée doit être spécifiée en nombre de frames, ce qui nécessite une conversion du timecode en frames.

##print(timeline.GetCurrentTimecode())
projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()
# timeline.AddMarker(frameId, color, name, note, duration(frames), customData) 
timeline.AddMarker(34, "Red", "le_nom", "la_note", 1)

Ajouter un marker à l’endroit du curseur dans la timeline

En utilisant la méthode AddMarker, nous pouvons ajouter un marqueur à l’endroit précis où se trouve le curseur dans la timeline. Cela implique de récupérer le timecode du curseur et de le convertir en nombre de frames, car la méthode AddMarker utilise des frames pour le placement.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

def timecode_to_frame(timecodeStart, timecode, framerate):
    s_heures, s_minutes, s_secondes, s_images = map(int, timecodeStart.split(':'))
    heures, minutes, secondes, images = map(int, timecode.split(':'))
    total_frames = ((heures-s_heures) * 3600 + (minutes-s_minutes) * 60 + (secondes-s_secondes)) * framerate + (images-s_images)
    return total_frames

timecodeStart = timeline.GetStartTimecode()
timecode = timeline.GetCurrentTimecode()
fps = timeline.GetSetting("timelineFrameRate")
currentTimeInFps = timecode_to_frame(timecodeStart, timecode, fps)
timeline.AddMarker(currentTimeInFps, "Red", "le_nom", "la_note", 1)

Compter le nombre de pistes actives dans la timeline

La méthode permet de compter le nombre de pistes actives dans la timeline en fonction du type de piste spécifié. Il peut s’agir de pistes vidéo, audio ou de sous-titres.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

print(timeline.GetTrackCount("video"))
print(timeline.GetTrackCount("audio"))
print(timeline.GetTrackCount("subtitle"))

Obtenir la liste (nom et index) des pistes actives d’un certain type

Cette méthode permet d’obtenir la liste des pistes actives d’un certain type, en fournissant le nom de la piste. Cela peut être utile dans des cas spécifiques où vous avez besoin de cibler des pistes particulières.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()
nbtrack_video = timeline.GetTrackCount("video")
for index in range(1, nbtrack_video+1):
    print(timeline.GetTrackName("video", index))

Ajouter une nouvelle piste à la timeline

La méthode AddTrack permet d’ajouter une nouvelle piste à la timeline. Vous pouvez ajouter des pistes vidéo, audio ou de sous-titres en fonction de vos besoins. Pour les pistes audio, vous devrez spécifier des paramètres supplémentaires, tels que mono ou stéréo.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()

timeline.AddTrack("video")   
timeline.AddTrack("audio", "stereo")
timeline.AddTrack("subtitle")

Obtenir tous les paramètres de la timeline

Cette méthode permet de récupérer tous les paramètres de la timeline actuelle, ce qui peut être utile lorsque vous avez besoin d’un grand nombre d’informations sur la timeline pour des opérations spécifiques.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()
print(timeline.GetSetting())

Obtenir un paramètre précis de la timeline

Similaire à la méthode précédente, mais celle-ci vous permet de récupérer un paramètre spécifique de la timeline, ce qui peut vous faire gagner du temps si vous avez besoin d’informations ciblées.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()
print(timeline.GetSetting("timelineFrameRate"))

Récupérer les items d’une piste

Vous pouvez utiliser cette méthode pour récupérer la liste des items présents dans une piste spécifique de la timeline. Cela renverra des objets Item qui contiennent des informations sur chaque élément, et vous pourrez utiliser différentes méthodes de l’objet Item pour effectuer diverses opérations.

projectManager = resolve.GetProjectManager()
timeline = project.GetCurrentTimeline()
items = timeline.GetItemListInTrack("video", 1)
for item in items:
    print(item.GetName())

Ces objets Item offrent une variété de méthodes qui vous permettront de réaliser différentes opérations sur les éléments. Voici la liste des méthodes disponible pour un objet item :

MéthodeDescription
AddFlagAjoute un drapeau à l’élément.
AddFusionCompAjoute une composition Fusion à l’élément.
AddMarkerAjoute un marqueur à l’élément.
AddTakeAjoute une prise à l’élément.
AddVersionAjoute une version à l’élément.
ApplyArriCdlLutApplique une LUT Arri CDL à l’élément.
ClearClipColorEfface la couleur du clip de l’élément.
ClearFlagsEfface tous les drapeaux de l’élément.
CopyGradesCopie les corrections colorimétriques de l’élément.
CreateMagicMaskCrée un masque magique pour l’élément.
DeleteFusionCompByNameSupprime une composition Fusion par nom.
DeleteMarkerAtFrameSupprime un marqueur à une frame donnée.
DeleteMarkerByCustomDataSupprime un marqueur en fonction de ses données personnalisées.
DeleteMarkersByColorSupprime les marqueurs en fonction de leur couleur.
DeleteTakeByIndexSupprime une prise par index.
DeleteVersionByNameSupprime une version par nom.
ExportFusionCompExporte une composition Fusion de l’élément.
FinalizeTakeFinalise une prise.
GetClipColorObtient la couleur du clip de l’élément.
GetClipEnabledVérifie si le clip de l’élément est activé.
GetCurrentVersionObtient la version actuelle de l’élément.
GetDurationObtient la durée de l’élément.
GetEndObtient le point de fin de l’élément.
GetFlagListObtient la liste des drapeaux de l’élément.
GetFlagsObtient les drapeaux de l’élément.
GetFusionCompByIndexObtient une composition Fusion par index.
GetFusionCompByNameObtient une composition Fusion par nom.
GetFusionCompCountObtient le nombre de compositions Fusion de l’élément.
GetFusionCompNameListObtient la liste des noms de compositions Fusion de l’élément.
GetFusionCompNamesObtient les noms de toutes les compositions Fusion de l’élément.
GetLUTObtient la LUT appliquée à l’élément.
GetLeftOffsetObtient le décalage gauche de l’élément.
GetMarkerByCustomDataObtient un marqueur en fonction de ses données personnalisées.
GetMarkerCustomDataObtient les données personnalisées d’un marqueur.
GetMarkersObtient la liste des marqueurs de l’élément.
GetMediaPoolItemObtient l’élément du Media Pool associé.
GetNameObtient le nom de l’élément.
GetNodeLabelObtient l’étiquette du nœud de l’élément.
GetNumNodesObtient le nombre de nœuds de l’élément.
GetPropertyObtient la propriété spécifiée de l’élément.
GetRightOffsetObtient le décalage droit de l’élément.
GetSelectedTakeIndexObtient l’index de la prise sélectionnée.
GetStartObtient le point de départ de l’élément.
GetStereoConvergenceValuesObtient les valeurs de convergence stéréo de l’élément.
GetStereoLeftFloatingWindowParamsObtient les paramètres de fenêtre flottante gauche stéréo.
GetStereoRightFloatingWindowParamsObtient les paramètres de fenêtre flottante droite stéréo.
GetTakeByIndexObtient une prise par index.
GetTakesCountObtient le nombre de prises de l’élément.
GetUniqueIdObtient l’identifiant unique de l’élément.
GetVersionNameListObtient la liste des noms de versions de l’élément.
GetVersionNamesObtient les noms de toutes les versions de l’élément.
ImportFusionCompImporte une composition Fusion dans l’élément.
LoadBurnInPresetCharge un préréglage de gravure dans l’élément.
LoadFusionCompByNameCharge une composition Fusion par nom.
LoadVersionByNameCharge une version par nom.
PrintAffiche des informations de débogage sur l’élément.
RegenerateMagicMaskRégénère un masque magique pour l’élément.
RenameFusionCompByNameRenomme une composition Fusion par nom.
RenameVersionByNameRenomme une version par nom.
SelectTakeByIndexSélectionne une prise par index.
SetCDLApplique une CDL (Color Decision List) à l’élément.
SetClipColorDéfinit la couleur du clip de l’élément.
SetClipEnabledActive ou désactive le clip de l’élément.
SetLUTApplique une LUT (Look-Up Table) à l’élément.
SetPropertyDéfinit la propriété spécifiée de l’élément.
SmartReframeApplique le recadrage intelligent à l’élément.
StabilizeApplique la stabilisation à l’élément.
UpdateMarkerCustomDataMet à jour les données personnalisées d’un marqueur.
UpdateSidecarMet à jour les fichiers Sidecar associés à l’élément.