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.
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éthode | Description |
---|---|
AddMarker | Ajoute un repère (marker) à la timeline. |
AddTrack | Ajoute une nouvelle piste à la timeline. |
ApplyGradeFromDRX | Applique une correction colorimétrique à partir d’un fichier DRX. |
CreateCompoundClip | Crée un clip composé dans la timeline. |
CreateFusionClip | Crée un clip Fusion dans la timeline. |
CreateSubtitlesFromAudio | Crée des sous-titres à partir de l’audio de la timeline. |
DeleteClips | Supprime des clips de la timeline. |
DeleteMarkerAtFrame | Supprime un repère à un moment spécifique dans la timeline. |
DeleteMarkerByCustomData | Supprime un repère en fonction de données personnalisées. |
DeleteMarkersByColor | Supprime des repères en fonction de leur couleur. |
DeleteTrack | Supprime une piste de la timeline. |
DetectSceneCuts | Détecte les coupures de scène dans la timeline. |
DuplicateTimeline | Duplique la timeline actuelle. |
Export | Exporte la timeline vers un fichier ou une destination spécifiée. |
GetCurrentClipThumbnailImage | Obtient l’image miniature du clip actuellement sélectionné. |
GetCurrentTimecode | Obtient le timecode actuel de la timeline. |
GetCurrentVideoItem | Obtient l’élément vidéo actuellement sélectionné dans la timeline. |
GetEndFrame | Obtient le numéro de frame de fin de la timeline. |
GetIsTrackEnabled | Vérifie si une piste est activée dans la timeline. |
GetIsTrackLocked | Vérifie si une piste est verrouillée dans la timeline. |
GetItemListInTrack | Obtient la liste des éléments dans une piste spécifique. |
GetItemsInTrack | Obtient les éléments (clips, effets, etc.) dans une piste spécifique. |
GetMarkerByCustomData | Obtient un repère en fonction de données personnalisées. |
GetMarkerCustomData | Obtient les données personnalisées d’un repère. |
GetMarkers | Obtient la liste des repères dans la timeline. |
GetName | Obtient le nom de la timeline. |
GetSetting | Obtient une valeur de paramètre spécifique de la timeline. |
GetStartFrame | Obtient le numéro de frame de début de la timeline. |
GetStartTimecode | Obtient le timecode de début de la timeline. |
GetTrackCount | Obtient le nombre de pistes dans la timeline. |
GetTrackName | Obtient le nom d’une piste spécifique dans la timeline. |
GetUniqueId | Obtient un identifiant unique pour la timeline. |
GrabAllStills | Capture toutes les images fixes de la timeline. |
GrabStill | Capture une image fixe à un moment spécifique dans la timeline. |
ImportIntoTimeline | Importe des éléments dans la timeline depuis le média pool. |
InsertFusionCompositionIntoTimeline | Insère une composition Fusion dans la timeline. |
InsertFusionGeneratorIntoTimeline | Insère un générateur Fusion dans la timeline. |
InsertFusionTitleIntoTimeline | Insère un titre Fusion dans la timeline. |
InsertGeneratorIntoTimeline | Insère un générateur dans la timeline. |
InsertOFXGeneratorIntoTimeline | Insère un générateur OFX dans la timeline. |
InsertTitleIntoTimeline | Insère un titre dans la timeline. |
Affiche des informations sur la timeline dans la console. | |
SetClipsLinked | Définit si les clips de la timeline sont liés ou non. |
SetCurrentTimecode | Définit le timecode actuel de la timeline. |
SetName | Définit le nom de la timeline. |
SetSetting | Définit une valeur de paramètre spécifique de la timeline. |
SetStartTimecode | Définit le timecode de début de la timeline. |
SetTrackEnable | Active ou désactive une piste dans la timeline. |
SetTrackLock | Verrouille ou déverrouille une piste dans la timeline. |
SetTrackName | Définit le nom d’une piste spécifique dans la timeline. |
UpdateMarkerCustomData | Met à 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.
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())
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())
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
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 à 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))
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)
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)
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"))
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))
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")
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())
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"))
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éthode | Description |
---|---|
AddFlag | Ajoute un drapeau à l’élément. |
AddFusionComp | Ajoute une composition Fusion à l’élément. |
AddMarker | Ajoute un marqueur à l’élément. |
AddTake | Ajoute une prise à l’élément. |
AddVersion | Ajoute une version à l’élément. |
ApplyArriCdlLut | Applique une LUT Arri CDL à l’élément. |
ClearClipColor | Efface la couleur du clip de l’élément. |
ClearFlags | Efface tous les drapeaux de l’élément. |
CopyGrades | Copie les corrections colorimétriques de l’élément. |
CreateMagicMask | Crée un masque magique pour l’élément. |
DeleteFusionCompByName | Supprime une composition Fusion par nom. |
DeleteMarkerAtFrame | Supprime un marqueur à une frame donnée. |
DeleteMarkerByCustomData | Supprime un marqueur en fonction de ses données personnalisées. |
DeleteMarkersByColor | Supprime les marqueurs en fonction de leur couleur. |
DeleteTakeByIndex | Supprime une prise par index. |
DeleteVersionByName | Supprime une version par nom. |
ExportFusionComp | Exporte une composition Fusion de l’élément. |
FinalizeTake | Finalise une prise. |
GetClipColor | Obtient la couleur du clip de l’élément. |
GetClipEnabled | Vérifie si le clip de l’élément est activé. |
GetCurrentVersion | Obtient la version actuelle de l’élément. |
GetDuration | Obtient la durée de l’élément. |
GetEnd | Obtient le point de fin de l’élément. |
GetFlagList | Obtient la liste des drapeaux de l’élément. |
GetFlags | Obtient les drapeaux de l’élément. |
GetFusionCompByIndex | Obtient une composition Fusion par index. |
GetFusionCompByName | Obtient une composition Fusion par nom. |
GetFusionCompCount | Obtient le nombre de compositions Fusion de l’élément. |
GetFusionCompNameList | Obtient la liste des noms de compositions Fusion de l’élément. |
GetFusionCompNames | Obtient les noms de toutes les compositions Fusion de l’élément. |
GetLUT | Obtient la LUT appliquée à l’élément. |
GetLeftOffset | Obtient le décalage gauche de l’élément. |
GetMarkerByCustomData | Obtient un marqueur en fonction de ses données personnalisées. |
GetMarkerCustomData | Obtient les données personnalisées d’un marqueur. |
GetMarkers | Obtient la liste des marqueurs de l’élément. |
GetMediaPoolItem | Obtient l’élément du Media Pool associé. |
GetName | Obtient le nom de l’élément. |
GetNodeLabel | Obtient l’étiquette du nœud de l’élément. |
GetNumNodes | Obtient le nombre de nœuds de l’élément. |
GetProperty | Obtient la propriété spécifiée de l’élément. |
GetRightOffset | Obtient le décalage droit de l’élément. |
GetSelectedTakeIndex | Obtient l’index de la prise sélectionnée. |
GetStart | Obtient le point de départ de l’élément. |
GetStereoConvergenceValues | Obtient les valeurs de convergence stéréo de l’élément. |
GetStereoLeftFloatingWindowParams | Obtient les paramètres de fenêtre flottante gauche stéréo. |
GetStereoRightFloatingWindowParams | Obtient les paramètres de fenêtre flottante droite stéréo. |
GetTakeByIndex | Obtient une prise par index. |
GetTakesCount | Obtient le nombre de prises de l’élément. |
GetUniqueId | Obtient l’identifiant unique de l’élément. |
GetVersionNameList | Obtient la liste des noms de versions de l’élément. |
GetVersionNames | Obtient les noms de toutes les versions de l’élément. |
ImportFusionComp | Importe une composition Fusion dans l’élément. |
LoadBurnInPreset | Charge un préréglage de gravure dans l’élément. |
LoadFusionCompByName | Charge une composition Fusion par nom. |
LoadVersionByName | Charge une version par nom. |
Affiche des informations de débogage sur l’élément. | |
RegenerateMagicMask | Régénère un masque magique pour l’élément. |
RenameFusionCompByName | Renomme une composition Fusion par nom. |
RenameVersionByName | Renomme une version par nom. |
SelectTakeByIndex | Sélectionne une prise par index. |
SetCDL | Applique une CDL (Color Decision List) à l’élément. |
SetClipColor | Définit la couleur du clip de l’élément. |
SetClipEnabled | Active ou désactive le clip de l’élément. |
SetLUT | Applique une LUT (Look-Up Table) à l’élément. |
SetProperty | Définit la propriété spécifiée de l’élément. |
SmartReframe | Applique le recadrage intelligent à l’élément. |
Stabilize | Applique la stabilisation à l’élément. |
UpdateMarkerCustomData | Met à jour les données personnalisées d’un marqueur. |
UpdateSidecar | Met à jour les fichiers Sidecar associés à l’élément. |