Pythonで動画の再生時間をOpenCVで取得する方法

Pythonだけでは動画再生時間は取得できません。

だからOpenCVを使います。

ところがOpenCVにも少し不便なことがあって、

  • 再生時間を直接は取得できない、
  • FPS・フレーム数から間接的に求める

このような求め方が必要になってきます。

再生時間の取得方法について少し解説

初めに動画関連で知っておくべき用語について

もしPythonで動画再生時間を取得したいなら…

最低限でも以下の意味は知っておくべきです。

  • フレーム数
    動画はパラパラ漫画のように1つ1つの画像で構成されている。この1つ1つの画像のことをフレームと呼んでいる。
  • フレームレート/FPS
    動画1秒あたりに何フレームが含まれるのが = Frames Per Seconds。例えば20FPSなら1秒あたりに20回のフレーム(画像)が含まれてるってこと
  • ミリ秒単位
    日常では時間をあらわすのに秒(seconds)を使うが、その1000分の1の単位としてミリ秒(millis)が用意されている。例えば 3000ミリ秒 = 3秒 など

OpenCV APIでは動画のFPSは取得できます。
それから動画の総フレーム数も取得できます。

でも動画再生時間を返すメソッドはありません。

でも上記を利用して間接的に求めることは可能です。

動画再生時間は「総フレーム数/FPS」で算出

では動画再生時間を次の2つで計算したいとします。

▼ Python+OpenCVで取得できる2つのメタ情報

  • FPS = フレームレート
  • FRAMES = 動画の総フレーム数

その場合、以下の式で再生時間は算出できます。

▼ この式で再生時間(秒)が分かる

総フレーム数をFPSで割るだけ

先ほど説明したようにFPS = 1秒あたりのフレーム数でした。そして 総フレーム数 = FPS * 再生時間 だから再生時間を求め方はこうなるわけです。

これだけのシンプルな話です。

OpenCVで動画再生時間を求めるコード例

それでは実際のPythonコードについて

OpenCVを使った動画再生時間の求め方は以下です。

▼ Python+OpenCVでのコード例

▼ このコードをある動画で試した出力結果

再生時間をミリ秒単位で取得できました。

今回のコードを書いていても分かる通り、

  • 動画は再生時間をメタ情報に持たない
  • FPS・フレーム総数から算出できるだけ

今まで再生時間もメタ情報だと思い込んでました。

でも動画時間は副次的なものなんですね。なるほど

再生時間を直接取得できないことに注意

ここまでで何度も書いたように…

OpenCVではこのように再生時間を求めます。

直に再生時間を取得できないので注意です。

以上、Pythonで動画再生時間取得でした。ではまた

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください