PowerShellでゆっくりムービーメーカー4の.ymmpからチャプターファイル(.txt)を作成するスクリプト

powershell コンピュータ
powershell

ゆっくりムービーメーカー4で生成する動画にチャプターファイルを手で入力するのが面倒なのでymmpファイルからチャプターファイルを作成するPowerShellスクリプトを作成してみました。

汎用性は皆無ですがタイムラインのレイヤー1上のアイテムの開始フレームをチャプターの時間として扱うようになっています。
チャプターのコメント(ラベル?)部分はファイル名セットしています。
テストしたファイル名が数値とアルファベットでしたので日本語ファイル名の場合文字化けするかもしれません。

<#
.SYNOPSIS
.ymmpからチャプターファイル(.txt)を作成

.DESCRIPTION
出力形式
00:00:00.0000 文字列

.EXAMPLE
> CreateCahpterFromYmmp.ps1 -YmmpFIle Ymmpファイルのパス [-ChapterFile チャプターファイルのパス]

.PARAMETER YmmpFile
元になる.ymmpファイルのパス

.PARAMETER ChapterFile
出力するチャプターファイルのパス(省略可)

.LINK
#>

param(
    [string]$YmmpFile,
    [string]$ChapterFile = [System.IO.Path]::GetDirectoryName($YmmpFile) + "\" + ([System.IO.Path]::GetFileNameWithoutExtension($YmmpFile) + ".txt")
)

$ErrorActionPreference = "STOP"


$j = Get-Content $YmmpFile -Encoding UTF8 | ConvertFrom-Json
$fps = [int]($j.Timeline.VideoInfo.FPS)

$text = ""
$j.Timeline.Items | ? {$_.Layer -eq 0 } | sort -Property Frame | % -Begin {$i=0}{
    $i++
    $name = [System.IO.Path]::GetFileNameWithoutExtension($_.FilePath)
    if ($name -eq "") {
        $name = "{0:000}" -f $i
    }

    $t = [long]($_.Frame * (10000000.0 / [double]$fps))
    $tt = [datetime]::new($t) - [datetime]::new(0)
    $tts = $tt.ToString()
    if ($tts.Length -eq 8){
        $tts = $tts + ".00000000"
    }
    $tts = $tts.Substring(0, 12)
    if ($text -ne "") { $text += "`n" }
    $text += ("{0} {1}" -f $tts, $name)
}

echo $ChapterFilePath
[System.IO.File]::WriteAllLines($ChapterFile, $text)

ymmpファイルはJSON形式ですのでPowerShellのConvertFrom-JsonでPowerShellのオブジェクトに変換することで、情報を取得することが出来ます。ファイルフォーマットが変更される可能性は高いので、取得した情報の精査は十分に行う必要があります。
そのあたりを考えると、チャプターを手で入力する作業と比べて楽かどうかは正直微妙な感じがします。

コメント