##はじめに
アプリから作成した動画ファイル(MP4)を、SharePointから「ファイルプロパティのMetaデータ(タグ)」で検索する要件がありましたが、Metaデータ(タグ)を設定する方法をググっても情報が見つけられなかったので、MP4のBinaryを解析し、Metaデータ(タグ)の設定と取得を行うプログラムを作成しました。
##該当箇所
サブタイトル、評価、タグ以外のMetaデータは「C# + taglib」で修正できます。
今回の記事はタグのみです。
##Binary解析
「Header Reader MP4」を使用し解析しております。
※ダウンロードサイトが「https保護」されていないので、リンクは差し控えます。
###UdtaBox
以下の図により、タグ編集前(plan mp4)とタグ編集後(tag edit mp4)を比べると、UdtaBoxにXtraBox追加されていることがわかります。
###XtraBox
タグ編集プログラム作りながら解析した結果を以下に記載いたします。
byteからまで | byte値 | 値の説明 |
---|---|---|
1~4 | 0x00 0x00 0x00 0x4D | 固定値 |
5~8 | 0x58 0x74 0x72 0x61 | Xtra 固定値 |
9~12 | 0x00 0x00 0x00 0x45 | 13byte目~最終byteまでの総byte数 |
13~16 | 0x00 0x00 0x00 0x0B | 固定値 |
17~27 | 0x57 0x4D 0x2F 0x43 0x61 0x74 0x65 0x67 0x6F 0x72 0x79 | WM/Category 固定値 |
28~31 | 0x00 0x00 0x00 0x03 | タグ数 ;区切り テスト;test;1234;なので3 |
32~35 | 0x00 0x00 0x00 0x0E | テスト文字列のbyte数(unicode) + 8 例:) 1文字の場合 0x0A, 2文字の場合 0x0C, 3文字の場合 0x0E, 4文字の場合 0x10 |
36~37 | 0x00 0x08 | 固定値 タグ文字列の開始 |
38~44 | 0xC6 0x30 0xB9 0x30 0xC8 0x30 | テスト文字列 Unicode |
45~46 | 0x00 0x00 | 固定値 タグ文字列の終了 |
47~50 | 0x00 0x00 0x00 0x10 | test文字列のbyte数(unicode) + 8 例:) 1文字の場合 0x0A, 2文字の場合 0x0C, 3文字の場合 0x0E, 4文字の場合 0x10 |
51~52 | 0x00 0x08 | 固定値 タグ文字列の開始 |
53~60 | 0x74 0x00 0x65 0x00 0x73 0x00 0x74 0x00 | test文字列 Unicode |
61~62 | 0x00 0x00 | 固定値 タグ文字列の終了 |
63~66 | 0x00 0x00 0x00 0x10 | 1234文字列のbyte数(unicode) + 8 例:) 1文字の場合 0x0A, 2文字の場合 0x0C, 3文字の場合 0x0E, 4文字の場合 0x10 |
67~68 | 0x00 0x08 | 固定値 タグ文字列の開始 |
69~72 | 0x31 0x00 0x32 0x00 0x33 0x00 0x34 0x00 | 1234文字列 Unicode |
73~74 | 0x00 0x00 | 固定値 タグ文字列の終了 |
##設定/取得 プログラム
taglibでUdtaBoxが設定できますが、Binaryしか設定できないので、指定した文字列をBinaryに変換しUtdaBoxに設定するプログラムと、taglibで取得したUdtaBoxのBinaryを文字列に変換するプログラムを作成しました。
設定/取得ともに「タグ」のみです。
GitHubにあります。TagLibMP4Extentions
###使い方
string mp4Path = Path.Combine(Environment.CurrentDirectory, "Test.mp4");
//タグの設定
await TagLibMP4Extentions.SetMetaTagAsync(mp4Path, new string[] { "test1", "テスト2", "test3"} );
//タグの取得
var getTag = await TagLibMP4Extentions.GetMetaTagAsync(mp4Path);
###環境
- .NET Framework 4.5 以降
- taglib 2.1.0 使用
PM> Install-Package taglib -Version 2.1.0