6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MP4 MetaデータのBinary解析と設定/取得について

Last updated at Posted at 2018-10-29

##はじめに
アプリから作成した動画ファイル(MP4)を、SharePointから「ファイルプロパティのMetaデータ(タグ)」で検索する要件がありましたが、Metaデータ(タグ)を設定する方法をググっても情報が見つけられなかったので、MP4のBinaryを解析し、Metaデータ(タグ)の設定と取得を行うプログラムを作成しました。

##該当箇所
サブタイトル、評価、タグ以外のMetaデータは「C# + taglib」で修正できます。
今回の記事はタグのみです。
image.png

##Binary解析
「Header Reader MP4」を使用し解析しております。
※ダウンロードサイトが「https保護」されていないので、リンクは差し控えます。

###UdtaBox
以下の図により、タグ編集前(plan mp4)とタグ編集後(tag edit mp4)を比べると、UdtaBoxにXtraBox追加されていることがわかります。
image.png

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

###使い方

sample.cs
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 使用
nuget
PM> Install-Package taglib -Version 2.1.0
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?