none
動画ファイルのフォーマットを得るプログラムを作りたい RRS feed

  • 質問

  • VisualStudio2019/VisualC++ MFCで動画系のソフトを作っています。(OS:Windows10のみ)

    VisualC++で指定した動画ファイルを読んで 何のフォーマット(Mpeg1/Mpeg2.., MOV等)か調べる方法を教えてください。
    フォーマットはメジャー処だけで十分ですが、mpegに関してはバージョンも得る必要があります。

    よろしくお願いします。


    2021年1月18日 7:01

回答

  • 念のため。ライセンスを気にされていると言うことですか?

    もし、ライセンスが理由なら、ソースコードを読み込んで参考にして実装する行為もグレーだと思いますので、閲覧もやめた方が良いと思いますよ。

    ご忠告ありがとうございます。

    既存のプログラムでffmpegを使っている事が判ったので、これから必要な情報が取れそうな感じになりました。 まずはこの線で調査を進める予定です。

    • 回答としてマーク AppWorks 2021年1月28日 0:19
    2021年1月27日 11:51

すべての返信

  • AppKeyさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご説明によると、ファイルの形式を取得したいのではないかと思います。 
    もしそうなら、DirectShowSDKを使用してみることをお勧めします。 
    DirectShow SDKは、アプリケーションがほとんどのメディアファイルタイプに関する限られた詳細セットを検出できるようにするツールを提供します。

    Discovering a File's Formatをご参照ください。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月20日 8:56
    モデレータ
  • ありがとうございます。

    DirectShowは現状のプログラムでも使用していますが、
    Mpeg1と2以外は何か判別出来なさそうです。


    C# でShell.ApplicationwoのGetDetailOfで動画ファイルノ詳細な情報がいろいろ取れるようなので、
    そうゆうのが C++で使えればいいのですが。  

    2021年1月20日 9:26
  • C# でShell.ApplicationwoのGetDetailOfで動画ファイルノ詳細な情報がいろいろ取れるようなので、
    そうゆうのが C++で使えればいいのですが。  

    GetDetailsOf のことでしょうか。
    だとしたらそれは、Shell.Application (Shell オブジェクト) のメンバーでは無かったはず…。


    2021年1月20日 10:42
  • ありがとうございます。

    試してみます。

    2021年1月20日 22:56
  • ありがとうございます。

    試してみます。

    Shell.Applicationは主にファイル拡張子から動画フォーマットを返しているような感じだったので、拡張子を削除したら何の動画フォーマットか判らないようでした。

    目的はファイルの中を調べてどの動画フォーマットかを知りたいので、そのような事が出来るAPI/SDKがありましたらご教授ください。

    2021年1月26日 2:00
  • オープンソース(BSD ライセンス)の MediaInfo で、必要な情報を取得できますか?
    中身はあまり読んでいませんが、GUI / コマンドライン / DLL 呼び出しに対応しているようなので、もしかしたら使えるかもしれません。

    2021年1月26日 2:36
  • ありがとうございます。

    MediaInfo はソースをダウンロードしていますが、ソースが巨大すぎてまた見てない状況です。

    DirectDrawやその他の動画SDKも使っているので、動画ファイルのある程度の情報は得ているので後は動画フォーマットだけを得る事なんですが、それを得るだけで巨大なソースを解析するのはコストが高いと考えていました。 

    そろそろMediaInfoのソースを調べる必要 あるかと考えていますが、もっと簡単に得る手があればそちらを試したいです。

    2021年1月26日 2:50
  • MediaInfo はソースをダウンロードしていますが、ソースが巨大すぎてまた見てない状況です。

    ソースを見るというのは後の話で、まずはコンパイル済みの GUI や、CUI 版の --Full オプションなどで、「求めるべき情報が得られるのかどうか」を最初に確認するべきなのでは。

    それを得るだけで巨大なソースを解析するのはコストが高いと考えていました。

    CUI 版なら呼び出して出力結果を得るだけでしょうし、DLL 版なら \MediaInfoLib\Source\MediaInfoDLL\ の宣言を使って、MediaInfo.dll の API を数個呼ぶだけの話だと思っていたのですが、そういう単純な話ではないのかな…。

    手抜きなら Open → Inform → Close だけでひとまず一通りの情報が手に入りますし、特定の情報だけを得たいなら、MediaInfo_Get で StreamKind と Parameter 指定で取得できるかと思っていました。

    2021年1月26日 4:37
  • MediaInfo は欲しい情報が得られる事は確認していますが、
    クライアントの移行で、これをソフトの中に入れたくないようなので別の方法を探していました。
    2021年1月26日 6:25
  • 念のため。ライセンスを気にされていると言うことですか?

    もし、ライセンスが理由なら、ソースコードを読み込んで参考にして実装する行為もグレーだと思いますので、閲覧もやめた方が良いと思いますよ。

    2021年1月26日 10:53
    モデレータ
  • 念のため。ライセンスを気にされていると言うことですか?

    もし、ライセンスが理由なら、ソースコードを読み込んで参考にして実装する行為もグレーだと思いますので、閲覧もやめた方が良いと思いますよ。

    ご忠告ありがとうございます。

    既存のプログラムでffmpegを使っている事が判ったので、これから必要な情報が取れそうな感じになりました。 まずはこの線で調査を進める予定です。

    • 回答としてマーク AppWorks 2021年1月28日 0:19
    2021年1月27日 11:51
  • C# でShell.ApplicationwoのGetDetailOfで動画ファイルノ詳細な情報がいろいろ取れるよう
    念のため。当該拡張子に関連付けられているアプリケーションが返している情報ですので、環境毎に実行結果が変わります。これは望む動作ではないと思われますので、お気を付けください。
    2021年1月27日 23:21
  • 質問者さんの過去の投稿を参照されるとわかると思いますが、何をアドバイスしようが結局はクライアントの意向でffmpegを採用することになるので、一般的な質問とはとらえない方がいいです。
    2021年1月27日 23:23