お世話になります。
ExcelVBAでファイルを検索するシステムを作成しています。
ここで検索するファイルはMPEG2限定なのですが、「ユリードビジオスタジオ」で作成されたMPEG2のファイルでも、「真空波動研」等で調べると実はMPEG1だった・・・。というファイルが存在し難航しています。(逆の場合もあります。MPEG1で作ったのに、実はMPEG2だった・・。)
多分内部的な規格の違いによるものだと思います。
最初はバイナリエディタ等でヘッダ情報を取得していたのですが、
ヘッダ情報だけでは判断できそうに有りません。
このファイルはMPEG1として作られたのか、MPEG2として作られたのかを判断する方法をどなたかご教授下さい。
ちなみにここで言うMPEG2の基準としては、WinMediaPlayerのVrt 6.4で再生できないファイルを指します。
No.1ベストアンサー
- 回答日時:
過去にAVIファイルの構造を解析したことがあります。
AVIファイルにはヘッダーに細かく情報が記載されているのですが、
MPEGにはそういう情報はないのですか。
バイナリエディタでみたようですが、
よろしければどのような構造になっているのか教えて下さい。
基本的にMPEG1とMPEG2は圧縮技術としてはほぼ同じものです。
ただ、Mpeg2はおそろしいほど拡張性があります。
例えば、MPEG2はインターレース、VBRに対応していますし、
ハイビジョン用などに11種類のプロファイルが制定されています。
エンコードの方式もフィルタも自在に組み込めますので、
メーカ各社も独自のエンコーダを持っています。
おそらくはこういった付加情報を基に判断するしかないのかもしれません。。。
>ユリードビジオスタジオ」で作成されたMPEG2のファイルでも
>「真空波動研」等で調べると実はMPEG1
これも謎の多い文書です。
ユリードのバージョンが古いせいなのかタコなのか、
はたまたMpgg2の作成条件がたまたまMpeg1の規格にはまってしまったのか・・・
前後の記述からして、
このファイルはメディアプレイヤ6.4で再生可能なのでしょう?
hawkwind様。
お返事ありがとうございました。
(1)まず、依頼主が、「ユリードビジオスタジオ」というソフトを使用し、MPEG1、MPEG2のmpgファイルを作成しています。
(作成方法は私にも良く解りません・・。)
(2)その中で、MPEG2のファイルのみを探し出すプログラムをExcelマクロで作成。(内部的には、まず拡張子が*.mpgのファイルを取得し、その中でもMPEG2のファイル一覧を出すというものです。)
バイナリエディタでこれらのファイルをみると、
ASSRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C
00000000 00 00 01 B3 2D 01 E0 C4 04 E2 21 70 00
00000010 00 08 00 40 00 00 01 00 00 0B 78 80 00
・
・
00049130 00 00 00 00 00 00 00 00 00 00 00 00 00
↑こんな感じになるのですが、最初は[00000000]の頭5バイト分の情報を取得し、これが[00][00][01][BA][44]になっていればMPEG2だ!という判断をしていたのですが、
(参考資料リンク:http://b2ch.at.infoseek.co.jp/dump.html#menu)
いざテストしてみると、上記パターン以外にもMPEG2のパターンがある事が解りました。
>「ユリードビジオスタジオ」で作成されたMPEG2のファイルでも「真空波動研」等で調べると実はMPEG1これも謎の多い文書です。
これは、依頼主が、「ユリードビジオスタジオ」でのファイルの作成過程で、「このファイルはMPEG1だ!」「このファイルはMPEG2だ!」と決めることが出来るらしいのですが、実際フリーのコーデック調査ソフト「真空波動研」でこれらを再生すると、依頼者は「MPEG2だ!」と言っているファイルが明らかに「真空波動研」上だと"MPEG1"と判断されてるんです(^^;)。(逆も有り)
>ユリードのバージョンが古いせいなのかタコなのか、
>はたまたMpgg2の作成条件がたまたまMpeg1の規格にはまってしまったのか・・・
hawkwind様のおっしゃる通り、後者の可能性が高いと思います。
逆に、VBA上から、MediaPlayerクラスで、どのフィルタを使っているのか?という情報は取得出来るものなのでしょうか?
No.3
- 回答日時:
パックヘッダ(00 00 01 BA)の最初バイトが
上位4bitが0010がMPEG1
上位2bitが01がMPEG2
です。
なんらかのデータ(タグ等)が付加されてる可能性もあるので、先頭からというのは不味いかもしれません。
真空波動研は多重化されてないビデオのみのファイル(エレメンタリーストリーム、ビデオの場合00 00 01 B3で始まってると思います。)、拡張子だけ見て判断みたいですので、あてにならないと思います。
(拡張子をaaaなどにして、調べると未対応形式になると思います。)
この場合、ビデオシーケンスヘッダ(00 00 01 B3)の後に、拡張ヘッダ(00 00 01 B5)がくれば、MPEG2なんですが、ビデオシーケンスヘッダが可変長ですので注意。
長くても139Byteなので、ビデオシーケンスヘッダから150Byte以内に、00 00 01 B5を発見したらMPEG2とかでもそう問題ない気もしますが。
http://www.andrewduncan.ws/MPEG/MPEG-1_Picts.html
http://www.andrewduncan.ws/MPEG/MPEG-2_Picts.html
No.2
- 回答日時:
>[00][00][01][BA][44]になっていればMPEG2だ!という判断
さすがにこれは無茶がありすぎです^^;
MPEGの仕様はここが詳しいようです。
http://www.pioneer.co.jp/crdl/tech/mpeg/3.html
先頭5バイトはパックヘッダーとよばれる部分の一部で、
とてもコーデックの情報を取得できるようにはみえません。
おそらくはシステムヘッダーの部分が該当すると思われます。
私もバイナリエディタでみてみましたが、パッと見では把握できませんでした。
WEB上でこの部分について記述しているサイトも30分ほど探してみましたが、
これといったサイトは見つかりませんでした。
どうやら専門書を購入する方が話は早いようです。
>MediaPlayerクラスでフィルタの情報は取得可能か
XP機から搭載されているGDI+(GDI32の後継)ならば
ImageCodecInfoクラスを用いて取得可能とのことです。
Windows98やNetFrameWorkがない環境では自前で
取得プログラムを用意する必要があるのではないでしょか。
(グレープシティにはこういうのが確実にあるのでしょうね)
http://www.atmarkit.co.jp/fdotnet/dotnettips/022 …
hawkwind様。
お忙しい中、色々と調べて頂きありがとうございますm(__)m。
やはり5バイト分だけでは情報としては少なすぎますか(^^;)
最終的に、依頼主より「MPEG1以外のファイルを見つけてもらえればよい」という仕様に変わりましたので、フィルターグラフマネージャーというクラス(?)を使用して、そのMPEGファイルを再生させる時に、どのフィルタを使うか?・・という条件で、MPEG1かそうでないか(MPEG2)を判断することにしました。ここで、フィルタの一覧の中に、"MPEG-I Stream Splitter"というフィルタがあれば、MPEG1であるし、そうでなければ、MPEG1以外のファイルだ・・という結論にいたりました。
ただそうなると、今度は「DirectX」なるもののバージョンを調べる必要があるようなのですが(参照:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1852105)、ここでまた難航してしまっています・・。
自分でも色々と調べてはいるのですが、もしお時間がおありでしたら、是非、この若輩者に知恵をお貸し下さい。
本当にありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
Eclipseで検索ができなくなった
-
VB6でTIFF図のプロパティを...
-
MusicXMLファイル作り方教えて...
-
BASP21のファイルアップロード...
-
【VBA】複数CSVの特定範囲を1つ...
-
VB6.0のメモリリークについて
-
HTMLファイルの生成
-
エディットボックスの内容をテ...
-
VBAでファイルOPEN ダイアログ...
-
ACCESS97で作成したmdbファイル...
-
dllって?
-
msgget()で指定するkey値について
-
HTMLテキストリンクでExcelファ...
-
main関数のコマンドライン引数...
-
C++によるファイル送受信プログ...
-
accessでクエリをExcelにエクス...
-
Excel VBAが徐々に遅くなる
-
CSVファイルの時刻の形式について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
Eclipseで検索ができなくなった
-
サイトマップにサブドメインを...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
msgget()で指定するkey値について
-
ディレクトリのサイズの取得
-
VB2008 iniファイルの全セクシ...
-
【VBA】複数CSVの特定範囲を1つ...
-
CSV名と同じシートを選択して取...
-
main関数のコマンドライン引数...
-
C++.NET 2003 「空のドキュメ...
-
ファイル更新日取得
-
VB6.0のメモリリークについて
-
VBS ファイルマージ処理
-
2GB以上のファイルを扱う方法
-
<input type="file" で初期値...
-
JavaでPDFファイルに変換するに...
おすすめ情報