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

powershell コンピュータ
powershell

MP4用のチャプターファイルを手で入力するのが面倒なのでymmpファイルからチャプターファイルを作成するPowerShellスクリプトを作成してみました。
タイムラインのレイヤー1上にあるアイテムの開始フレームをfpsから時間に変換しチャプターを作ってみました。
チャプターのコメント(ラベル?)部分はファイル名セットしています。
テストしたファイル名が数値とアルファベットでしたので日本語ファイル名の場合文字化けするかもしれません。

<#
.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)

コメント