DaVinci Resolveで元素材のカット・トリミングした時間を確認する | pythonスクリプト

以前、DaVinci ResolveのPython api環境構築をしてみましたが無料版ではresolveモジュール(api)を外部ファイルから触ることが出来ませんでした。

ところがバージョンを18.6にしたところ無料版でも外部スクリプトからapiが触れるようになっていたので急にモチベーションが上がりスクリプトを調べはじめました。

今回はタイムラインに配置した動画や音声を自由気ままに切り取り過ぎて元素材の何処を切り取ったのか分からなくなった際の対処法?について考えます。

 

状況

Track V2のようなビデオを適当に切り抜いた結果Track V1のようになってしまった。

Track A1のような音声を切り抜いてTrack A2のような状況になっている。

このような場合に切り抜いた要素が元の素材の何秒~何秒か正確に知りたい場合を想定しています。

 

環境

Windows 11
DaVinchi Resolve 18.6 [無料版]
Python 3.11.5 [Anaconda]

DaVinchi ResolveのPythonバージョンの確認はWorkspace->Consoleで開いたウィンドウに下記コマンドを打って確かめてください。

import sys
print(sys.version)

 

スクリプト作成

スクリプト名をclip-time-detecter.pyとして下記のコードを実装します。

# Timeline情報の取得
project_manager = resolve.GetProjectManager()
project = project_manager.GetCurrentProject()
timeline = project.GetCurrentTimeline()

# V1 Timeline上にあるアイテムの取得
clip_video_timeline_items = timeline.GetItemListInTrack("video", 1)
# 音声の場合
#clip_audio_timeline_items = timeline.GetItemListInTrack("audio", 2)

# V1 Timelline上にあるアイテム情報を時間軸左から順に表示
for idx, item in enumerate(clip_audio_timeline_items):
    print(f'---- item no {idx + 1} ----')
    print(f'TL Position: start {item.GetStart()}, end {item.GetEnd()}')

    media_item = item.GetMediaPoolItem()
    print(f'File path: {media_item.GetClipProperty("File Path")}')
    print(f'FPS: {media_item.GetClipProperty("FPS")}')
    print(f'Duration: {media_item.GetClipProperty("Duration")}')

    # 前からトリミングした位置 Left, 後ろからトリミングした位置 Right
    print(f'Clip Start Frame: {item.GetLeftOffset()}')
    print(f'Clip End Frame: {item.GetRightOffset()}')

    # トリミング位置 Frame -> sec へ変換
    clip_start = item.GetLeftOffset()/media_item.GetClipProperty('FPS')
    clip_end = item.GetRightOffset()/media_item.GetClipProperty('FPS')

    # 知りたかった情報 | 元の素材の何処を切り取ったのか?
    print(f'Clip Start Time: {clip_start} sec')
    print(f'Clip End Time: {clip_end} sec')
    print('---- end ----')

ポイントはitem.GetLeftOffset()/item.GetRightOffset()で得られる値が元素材の何フレーム目なのかというい値なので、元素材のFPSで割って秒数を計算します。

元素材の情報はmedia_item.GetClipProperty()で得られて、引数無しで実行すると辞書型で全ての変数を見ることが出来ます。

 

実行方法

作成したスクリプトを”C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts\Utility”フォルダに保存し、DaVinchi ResolveのWorkspace->Script->clip-time-detecterを実行します。

実行に成功すると下記のようにトラック上にあるアイテム毎に切り取り時間の開始・終了時間が表示されます。

[下図のClip Start Time と Clip End Timeが知りたかった時間情報]

 

media_item.GetClipProperty()を行うと元素材のコーデックやオーディオチャンネルなど詳細な情報が得られます。

{'Alpha mode': 'None', 'Angle': '', 'Audio Bit Depth': '32', 'Audio Ch': '2', 'Audio Codec': 'AAC', 'Audio Offset': '','Bit Depth': '8', 'Camera #': '', 'Clip Color': '', 'Clip Name': 'sample_1920_1080_24fps.mp4', 'Cloud Sync': '', 'Comments': '', 'Data Level': 'Auto', 'Date Added': 'Wed Apr 10 2024 14:57:57', 'Date Created': 'Wed Apr 10 2024 14:57:36', 'Date Modified': 'Wed Apr 10 14:57:36 2024', 'Description': '', 'Drop frame': '0', 'Duration': '00:00:22:18', 'Enable Deinterlacing': '0', 'End': '545', 'End TC': '00:00:22:18', 'FPS': 23.976, 'Field Dominance': 'Auto', 'File Name': 'sample_1920_1080_24fps.mp4', 'File Path': 'C:\\Users\\***\\Home\\workspace\\sample_1920_1080_24fps.mp4', 'Flags': '', 'Format': 'QuickTime', 'Frames': '546', 'Good Take': '', 'H-FLIP': 'Off', 'IDT': '', 'In': '', 'Input Color Space': 'Rec.709 (Scene)', 'Input LUT': '', 'Input Sizing Preset': 'None', 'Keyword': '', 'Noise Reduction': '', 'Offline Reference': '', 'Online Status': 'Online', 'Out': '', 'PAR': 'Square', 'Proxy': 'None', 'Proxy Media Path': '', 'Reel Name': '', 'Resolution': '1920x1080', 'Roll/Card': '', 'S3D Sync': '', 'Sample Rate': '48000', 'Scene': '', 'Sharpness': '', 'Shot': '', 'Slate TC': '00:00:00:00', 'Start': '0', 'Start KeyKode': '', 'Start TC': '00:00:00:00', 'SuperScale Noise Reduction': '0.5', 'SuperScale Sharpness': '0.5', 'Synced Audio': '', 'Take': '', 'Transcription Status': '', 'Type': 'Video + Audio', 'Uploaded From': '', 'Usage': '3', 'V-FLIP': 'Off', 'Video Codec': 'H.264 High L4.0', 'Super Scale': 1}
sam

sam

流山おおたかの森Techブログの管理人です。 お仕事のご依頼などはmail or Twitter[https://twitter.com/sam_sumario]で連絡頂けると反応出来ます。
Previous post DaVinchi Resolveで自作OpenFXプラグインを作る #3 | サンプルプラグインのビルド
Next post ホロメン背景切り抜き比較 | Anime-seg vs Cartoon-seg

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です