ファイルの プロパティ→詳細タブで出てくるこの辺の情報のことですね。
メタデータとも言われます。
もくじ
背景
適当に動画ファイルを録画して、ファイル名を番組名+サブタイトル+日時+放送局+エンコード方式etc…で設定していると、こんな感じでファイル名が凄いことになっていきます。
そして、ファイル名が長すぎると、保存出来ないなど、ファイルシステムでの管理上の問題が起きてくる。単に保存出来ないならまだしも、異なるファイルシステム間でコピーに失敗するなど、後になって問題が発覚することも。
具体的な制限については今回は本題ではないので、別の機会に。
涙とともに、夜な夜なパンをかじった。: ファイル名の最大長を求める。UTF-8におけるNTFSとEXT4の運用 ちょっぴりZFS
本題
そんなわけで、メタデータに一部の情報を移して、ファイル名のスリム化を図ることを考えます。
適当に情報を捨ててしまっても良いのですが、なるべくなら残しておいて、後で検索とかで引っかけられるようにしたい。
Powershellでプロパティ情報の参照
こっちは調べたらすぐに情報が出てきました。
Powershell とりあえずファイルのプロパティを全部出してみるスクリプト #PowerShell – Qiita
PowerShellでプロパティ情報の編集
で、編集する方はさっぱり情報が見当たらず。。
- PowerPointを開いて編集→再保存
【PowerShell】PowerPintのプロパティのタイトルを一括で変更する – 独り言
ただこれだとPowerPointに関連したファイルしか使えないので、別の方法を考えます。
- taglibsharpというライブラリを使用
このライブラリを追加すると、オーディオファイルの編集は出来るという記事。
Update a song metadata with taglib-sharp and Powershell – Stack Overflow
これは上手くいきました。オーディオもビデオも、一部のメタデータは共通しているようで、その部分はこれで編集してもきちんと反映されました。
- APIを追加して呼び出す
windows – PowerShell – Changing MP4 Metadata (Right Click Properties) – Stack Overflow
一番答えに近い。
$path = "D:\Temp\111.mp4"Add-Type -Path "D:\Temp\Microsoft.WindowsAPICodePack.Shell.dll"$shellFile = [Microsoft.WindowsAPICodePack.Shell.ShellFile]::FromFilePath($path)
$propertyWriter = $shellFile.Properties.GetPropertyWriter()
$titlePropertyKey = [Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey]::new([Guid]::new("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}"), 2)
$subtitlePropertyKey = [Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey]::new([Guid]::new("{56A3372E-CE9C-11D2-9F0E-006097C686F6}"), 38)
$propertyWriter.WriteProperty($titlePropertyKey, "New Title")
$propertyWriter.WriteProperty($subtitlePropertyKey, "New sub Title")
$propertyWriter.Close()
再掲ですが、↑の通りプロパティを設定すると、タイトルとサブタイトルにこんな感じで表示されます。
プロパティにはGUIDとIDが設定されていて、それを指定することで編集可能。
タイトルだったら
GUID: {F29F85E0-4FF9-1068-AB91-08002B27B3D9}
ID: 2
となります。
しかしこれの対応が分からずまた苦労しました。
[MS-WSP]: Common Open Properties | Microsoft Learn
ここの “Full property table” の項にそれっぽい一覧はあるのですが、
表記が微妙に違っていて、どれがどの項目に相当するのかはっきりせず。。