Androidで動画フレームレート・ビットレートなどを取得する方法/コード例

Androidアプリ開発でのこと

動画のメタ情報を取得してみたかったです。

  • 幅や高さなどのサイズ
  • フレームレート(FPS)
  • ビットレート(BPS)
  • フレームの総数
  • 再生時間(マイクロ秒)
  • クオリティ(画質)

こういうメタ情報は簡単に取得できます。

外部ライブラリとかも必要ありません。

そこで自分の記録を整理するために、
Androidで動画メタ情報の取得コード例を紹介!

1.動画をファイルピッカーからURIとして取得

まずは動画メタ情報取得の下準備から

動画をファイルピッカーなどから取得します。

▼ その取得コード(Kotlin)の一例をあげると次の通り

この例では ACTION_OPEN_DOCUMENT  からMIMEタイプが動画(video/*)のみを選択できるファイルピッカーを起動させてます。

そして動画が選ばれたらActivity#registerForActivityResultに渡したコールバック内で動画URIを取得できるという流れになってます。

ちなみに最近のAndroidはファイル周りが本当に厳格です。

詳しくは次記事などでも書いた通り

もちろん ACTION_OPEN_DOCUMENT  はファイルアクセス手段の1つに過ぎないですが、どのAPIレベルでも無難に動かせるので多用する場面が多いです。

ひとまず動画をURIとして取得しときます。

2.動画URIからフレームレートなどメタ情報を抽出

そしたらここからが本番

次のメタデータを抽出してみます。

  • 幅や高さなどのサイズ
  • フレームレート(FPS)
  • ビットレート(BPS)
  • フレームの総数
  • 再生時間(マイクロ秒)

抽出には MediaExtractorクラス を使ってみました。

このクラスはAPIレベル16以降で使えるため、
かなり古いAndroidとの互換性も保つことが可能です。

▼ 実際に動画メタ抽出のコードがこちら

何をしてるかはコメントを参照

各種メタデータはフレームレートだったら MediaFormat.KEY_FRAME_RATE MediaFormat.KEY_FRAME_RATE  、ビットレートだったら MediaFormat.KEY_BIT_RATE  から取得できます。分かりやすいですね。

ちなみに動画の総フレーム数の求め方について

あとついでにフレーム総数(frameCount)の求め方です。

このようにフレームレート(FPS)に再生時間(マイクロ秒単位なので秒単位に直す)をかければ算出することができます。

フレーム総数はメタデータには含まれません。

3.適当な動画のメタデータを抽出・調べてみた

適当な動画を用意してみました。

返ってきたメタデータはこんな感じです。

▼ 先ほどのextractVideoMetaDataメソッドの結果

再生時間は10000000となってますが、マイクロ秒なので秒に直すと10秒になります。表示フォーマットは各自工夫してください。

あとはフレームレートとかビットレートとか……色々取得できてます。もし存在しないならサイズ・再生時間しか返ってこないです。

Android上では動画メタ情報は超簡単に取得できる

別に専用ライブラリを入れる必要もありません。

ただMediaExtractorクラスに動画を渡せば取得できます。

以上、Androidでの動画メタ情報取得でした。

動画のFPS・BPSなどが知りたい時に便利です。ではまた