0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ffmpegで.h264を構成するフレーム枚数を推測する

Posted at

これは何?

Raspberry Piのカメラモジュールから標準のraspividで取得した動画は*.h264拡張子で保存されます。
これはRaspberry Piの外の環境では使い勝手が悪く1、都度.mov.mp4に変換することになります。
.mp4など使い勝手がいい形式にエンコードをかける過程でフレームレートの指定をするのですが、その逆算に必要な動画を構成するフレーム数の確認が必要になり、これが手軽に行えないかなと思い表層的な情報をさらった試行錯誤の記録です。

注意として、まだ私のメディアファイルのデータ形式についての理解が今ひとつなので話半分でみてもらえたら幸いです。詳しい方による解説等もいただければと思います。

ffmpegとは

Win/Mac/その他多くのUNIX系OSに対して提供されているメディアエンコーダ(として使える)ソフトウェアです。
バイナリをダウンロードしてきてPathを通すような感じで使います。(macだとHomebrew,Linuxだとaptなんかでのインストールが便利!)

.h264のファイルはffmpegを単純に使うならば、

CLI
ffmpeg -i input.h264 output.mp4

とすれば .mp4にエンコードできます。2

ちなみに...
似たようなエンコード処理を行えるソフトウェアとしてGPACの`mp4box`や`L-SMASH`等があります。 携帯動画変換君の時代以降、動画をエンコードする需要があり様々なGUIベースのエンコーダが提供されてきましたが、これらを内包して稼働させているものも多くありました(もちろんライセンスの規約内で)。 なお、`.h264`を変換なしで確認しなければいけない界隈の常套策は`VLC Media Player`で読み込むことですが、これはどうやらh264を内部でエンコードして表示してるっぽいですね。

本題:ffmpegで.h264を構成するフレーム枚数を推測する

ffmpegの取得で同時に使えるようになるffprobveを使うと動画の構成情報が調べられます。

CLI
ffprobe -i input.mp4 

ただしこれは.mp4に限った話で、.h264の動画はコーデックに付随した情報をうまく取得してくれません。

そのため、例えば、動画を構成する全ての静止画(=frame)に対して一枚ずつ解析をかける-show_frames オプションを利用すると無理やり数え上げを行うことができます。
すべてのフレームの解析情報がコンソールに表示されるととても困るので、適宜出力を捨てながら、

CLI
ffprobe -i input.h264 -show_frames |grep -c '^\[FRAME'

のようにすると.mp4のようにエンコード先の実体を保存しなくてもフレーム数を知ることができます。3

外部の質問サイトでも似たようなことをしているサイトがあるようですので合わせてご覧ください。

video - склеить - Считать количество кадров ffmpeg

以上、自分用メモでした。


  1. .h264形式の動画ファイルはどうやらフレームレートなど再生情報などをファイル内に保持しておらず、これが悪さをするらしい。

  2. 実際にはオプションをきちんと記述した方が効率よくエンコードがかけられる。
    なお、1920x1080 で15fps 45Mbpsの10分間の動画で20分ぐらいかかってます。なお、mp4boxだとデフォルトの設定でも2分くらいでエンコードできるので謎だ...

  3. コンソールへの出力が鬱陶しいならば2>&1みたいにさらに削ってもいいでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?