
お世話になります。
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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) Power Shellコマンドで作成日時を一括シフトする方法 3 2022/10/21 12:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- Excel(エクセル) エクセルでのアクセス履歴をとりたいです 1 2022/06/13 17:30
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- ドライブ・ストレージ Windows10でのファイル内の文字列検索 SSDに寿命? 4 2022/07/12 03:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
Eclipseで検索ができなくなった
-
2GB以上のファイルを扱う方法
-
main関数のコマンドライン引数...
-
C++.NET 2003 「空のドキュメ...
-
ファイル内容を比較する方法
-
EXCELで複数のファイルを同じブ...
-
vbaの構文の修正相談(xmlファ...
-
VB6.0のメモリリークについて
-
サイトマップにサブドメインを...
-
【VBA】印刷マクロのループ処理...
-
MPEG1とMPEG2を見分ける
-
Microoffice word 2007
-
JavaでPDFファイルに変換するに...
-
VBAで、JPG写真の撮影日時を読...
-
リソースファイルを認識してく...
-
ファイル作成日時と更新日時を...
-
VBSで、日本語文字列の抽出が、...
-
BASP21のファイルアップロード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
Eclipseで検索ができなくなった
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
main関数のコマンドライン引数...
-
2GB以上のファイルを扱う方法
-
C++によるファイル送受信プログ...
-
【VBA】複数CSVの特定範囲を1つ...
-
BASP21のファイルアップロード...
-
HTMLまたはJavaScriptでフ...
-
サイトマップにサブドメインを...
-
VB6.0のメモリリークについて
-
ファイルの排他について
-
File.Create で作成に失敗した場合
-
ファイル更新日取得
-
VSSでチェックアウトの取消をし...
-
VBS ファイルマージ処理
-
ディレクトリのサイズの取得
おすすめ情報