DaVinci Resolve18.6でマーカーをYoutube向けチャプターとして出力する方法(edlファイル→Pythonスクリプト)

当サイトではアフィリエイト広告を利用しています

Insta360x3を使い始めてからDaVinci Resolveで撮影した動画の切り貼りをしている中、Youtubeに投稿するにあたりチャプターを作成したいと考えました。

DaVinci ResolveでYoutubeに直接アップロードするのであれば自動でマーカーをチャプターにすることができるのですが、テキストとして出力することはそのままではできません。

今回はマーカーをedlファイルとして書き出し、それをPythonスクリプトで抽出することでチャプター名と時刻をテキストとすることができました。

環境

  • Windows 10
  • DaVinci Resolve 18.6 (無償版)

DaVinci Resolve API

DaVinci ResolveにはAPIがあり、情報は少ないもののLua、Python2、Python3で記述ができます。

Luaであれば特に設定は必要なく、Pythonであれば環境変数などの設定をすることで利用ができるようで、C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting\Readme.txtに使い方が記載されています。

私はLuaに疎くPythonで記述を試みたのですが、環境変数の設定を行っても正常にPythonスクリプトが動作せず、APIによる直接の操作をあきらめました。環境変数の設定を行っても以下のスクリプトで戻り値がNoneとなってしまったので。

import DaVinciResolveScript as dvr_script
resolve = dvr_script.scriptapp("Resolve")

edlファイルのエクスポート

API操作をあきらめて、マーカーの名前と時刻をいったん外部にエクスポートできないか試したところ、以下の方法でedlファイルとして出力できました。

まず、Edit画面においてマーカーを設定して名前をつけておきます。その後、同じくEdit画面で以下の手順を行います。

1. 開始タイムコードの設定

  1. メディアプールタブからTimeline 1に対して右クリック
  2. 「タイムライン」を選択
  3. 「開始タイムコードを設定」を選択
  4. 01:00:00:0000:00:00:00に変更する。

これでマーカーの時刻が0スタートになりYoutubeと同期できます。

2. マーカーのエクスポート

  1. メディアプールタブからTimeline 1に対して右クリック
  2. 「タイムライン」を選択
  3. 「書き出し」を選択
  4. 「タイムラインマーカーからedl」を選択
  5. edlファイルを保存する

これで、例えば以下のような要素を持つedlファイルが取得できます。4つの自国のうち1つ目がマーカーの開始時刻で、|M:に続くのがマーカー名となっているようです。

002  001      V     C        00:00:05:00 00:00:05:01 00:00:05:00 00:00:05:01
 |C:ResolveColorBlue |M:GPSログ |D:1

Pythonスクリプトによる抽出・変換

以下のように正規表現を使ってマーカー時刻とマーカー名を抽出します。

EDL_FILE = "data/Timeline 1.edl"
CH_FILE = "data/TimeLine 1.txt"

import re

# ?使って最短マッチング
# hh:mm:ssが欲しいので4つ目のmsecはグループから外す
pattern = r"^.+?(?P<time>\d{2}:\d{2}:\d{2}):\d{2}.+?\|M:(?P<text>.+?)\s+\|D:.+?$"
repat = re.compile(pattern, re.MULTILINE | re.DOTALL)

chap_list = []
with open(EDL_FILE, encoding="utf-8") as f:
    s = f.read()

    for m in repat.finditer(s):
        chap_list.append((m.group("time"), m.group("text")))

# 書き込み
print(chap_list)
with open(CH_FILE, "w", encoding="utf-8") as f:
    for ch in chap_list:
        f.write(f"{ch[0]} {ch[1]}\n")

これでテキストファイルとして以下のように時刻とマーカー名を出力できます。あとはこれをYoutube動画の概要に貼り付けてやればスキップができるようになります。

00:00:00 タイトル
00:00:05 GPSログ
00:00:19 平井大橋出発
00:02:29 斜め上前方から撮影
00:04:27 左斜め下後方から撮影
...
01:00:49 左斜め下後方から撮影
01:01:20 右肩に担いで後方から撮影
01:03:55 右後方下から撮影
01:04:28 右肩に担いで後方から撮影
01:19:04 浮間舟渡到着

動画例

以下の動画のチャプターリストは上記手順で出力したものになります。

まとめ

  • DaVinci ResolveでマーカーをYoutubeのチャプターに変換
  • APIでは上手くいかず、edlのエクスポートとPythonによる変換を行った
  • 正常にマーカーの時刻とテキストを出力することができた