• 締切済み

perl でwmvの再生時間を取得するにはどのようにしたらよろしいでしょうか?

タイトルのとおりですが、検索しても出てきませんでした。 よろしくお願いします。 なお、perlモジュールはNonXSのみ使用できる環境で、 時間取得は先頭の1kバイト程度でしかできません。

みんなの回答

  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

「File Properties Object」というところに説明があります。 見つからないなら、WMVはASF形式なので、 http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx のほうが解りやすいかもしれません。 WMVファイルの先頭は「ASF_Header_Object」(のGUID=75B22630-668E-11CF-A6D9-00AA0062CE6C)になっています(ちなみにlittle endian)。 これに続くASF_File_Properties_Objectを見つけたら、そこから数えて56バイト目から8バイトが、再生時間になっています。 単位は100ナノ秒、つまり1秒の1千万分の1単位で入っています。 Perlからならバイナリモードで開いて上記のバイト列を検索し、56バイト後の(読み飛ばして)8バイトを取得、という方法で可能だと思います。 他、上記のドキュメントに様々かなり詳しく説明されています。

ymda
質問者

お礼

http://search.cpan.org/~exiftool/Image-ExifTool-6.36/ このライブラリでタイトル等も一括して取得できることがわかりました。 ありがとうございます。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

おそらくRIFF形式でメタデータがヘッダ部に入っているはずなので、先頭の特定位置のバイトを読み込めば良いかと思います。 SDKを入手して(参考URL)ヘッダ部の構造を取得してはどうでしょうか。

参考URL:
http://www.microsoft.com/japan/msdn/windowsmedia/development/wmformat_9_sdk_intro.aspx
ymda
質問者

補足

SDKを入手してみたのですが、ヘッダ部の構造がわかりません。 また、RIFF形式ではないようです。(似てはいますが)

関連するQ&A