
お世話になります。
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パスワード設定のタグについて
-
C++.NET 2003 「空のドキュメ...
-
ファイルを取得するC#のプロ...
-
ファイルアップロードにて
-
ファイルサイズの取得
-
他のファイルから , 毎にデー...
-
HTMLのフレームについて
-
登録者のみ利用可能なファイル...
-
ファイルが使用中か調べたい (...
-
PDF表示の動的切り替えについて
-
ファイル一覧を動的に取得したい。
-
0バイトのテキストファイル
-
パーミッションの3桁目を6にせ...
-
VBAでフォルダ内の全てのcsv...
-
受信メールを一括してテキスト...
-
ZIPファイルダウンロードに...
-
クエリー出力からEXCELに吐き出...
-
excelからtextへ変換する際の出...
-
word2003のファイルをXPで
-
マイコンへのプログラム書き込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0バイトのテキストファイル
-
Eclipseで検索ができなくなった
-
【Excel VBA】取り込んだファイ...
-
C++.NET 2003 「空のドキュメ...
-
HTMLまたはJavaScriptでフ...
-
VBAで、JPG写真の撮影日時を読...
-
main関数のコマンドライン引数...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
リソースファイルを認識してく...
-
Javaのファイルダウンロードに...
-
2GB以上のファイルを扱う方法
-
C#について質問【複数の.datフ...
-
ディレクトリのサイズの取得
-
PHPからベーシック認証のかかっ...
-
<input type="file" で初期値...
-
VB2008 iniファイルの全セクシ...
-
教えて下さい。
-
サイトマップにサブドメインを...
-
vbaの構文の修正相談(xmlファ...
おすすめ情報