これは何?
Raspberry Piのカメラモジュールから標準のraspivid
で取得した動画は*.h264
拡張子で保存されます。
これはRaspberry Piの外の環境では使い勝手が悪く1、都度.mov
や.mp4
に変換することになります。
.mp4
など使い勝手がいい形式にエンコードをかける過程でフレームレートの指定をするのですが、その逆算に必要な動画を構成するフレーム数の確認が必要になり、これが手軽に行えないかなと思い表層的な情報をさらった試行錯誤の記録です。
注意として、まだ私のメディアファイルのデータ形式についての理解が今ひとつなので話半分でみてもらえたら幸いです。詳しい方による解説等もいただければと思います。
ffmpegとは
Win/Mac/その他多くのUNIX系OSに対して提供されているメディアエンコーダ(として使える)ソフトウェアです。
バイナリをダウンロードしてきてPathを通すような感じで使います。(macだとHomebrew
,Linuxだとapt
なんかでのインストールが便利!)
.h264
のファイルはffmpegを単純に使うならば、
ffmpeg -i input.h264 output.mp4
とすれば .mp4
にエンコードできます。2
ちなみに...
本題:ffmpegで.h264を構成するフレーム枚数を推測する
ffmpegの取得で同時に使えるようになるffprobveを使うと動画の構成情報が調べられます。
ffprobe -i input.mp4
ただしこれは.mp4
に限った話で、.h264
の動画はコーデックに付随した情報をうまく取得してくれません。
そのため、例えば、動画を構成する全ての静止画(=frame)に対して一枚ずつ解析をかける-show_frames
オプションを利用すると無理やり数え上げを行うことができます。
すべてのフレームの解析情報がコンソールに表示されるととても困るので、適宜出力を捨てながら、
ffprobe -i input.h264 -show_frames |grep -c '^\[FRAME'
のようにすると.mp4
のようにエンコード先の実体を保存しなくてもフレーム数を知ることができます。3
外部の質問サイトでも似たようなことをしているサイトがあるようですので合わせてご覧ください。
video - склеить - Считать количество кадров ffmpeg
以上、自分用メモでした。