質問: 現在、動画のframe rateを正確に表示する方法を探しています。 まず、ここまでに行ってきたことを少し記述します。 raspberry pi 3とそのcamera moduleを使って、動画を製作しています。 具体的には、raspividを使って、以下の3つのコードを試しました。 ``` raspivid -w 640 -h 480 -fps 30 -t 10000 -o test30fps.h264 raspivid -w 640 -h 480 -fps 90 -t 10000 -o test90fps.h264 raspivid -w 640 -h 480 -fps 180 -t 10000 -o test180fps.h264 ``` ここでは、各動画(.h264)は、640x480のサイズで、上から毎秒30, 90, 180フレームのスピードで、10秒間撮影しています。 このframe speedを測定するために、ffmpegを使いましたが、 すべて25fpsと表示されてしまいます。 ここではtest90fps.h264の結果を例として表示します。 ``` >ffmpeg -i test90fps.h264 Input #0, h264, from 'test90fps.h264': Duration: N/A, bitrate: N/A Stream #0:0: Video: h264 (High), yuv420p, 640x480, 25 fps, 25 tbr, 1200k tbn, 50 tbc ``` ここで、質問ですが、上記の3つの動画のframe speedを正しく表示してくれる方法を探しています。test30fps.h264では30fpsであり、test90fps.h264では90fpsと表示したいです。 ffmpegをここでは使っていますが、この方法に固執してはいません。 動画のframe rateの正しい表示をお知りの方がおられましたら、 ご教授をお願いします。 ただし、上記のコードを使ってraspberry piで作成される動画のframe rateは動画を見た限りでは、変わっていると思っています。しかし、この作成の時点で違うかもしれません。
回答: 残念ながら、h264ファイル(正確にはH.264 Bitstreamフォーマット)はフレームレート情報を正しく保持できません(※)。FFmpegが表示する "25fps" は、単に入力ファイルにはフレームレート情報がないためにデフォルト値を表示しているだけです。 raspivid公式ドキュメントにも記載あるように、MP4ファイルフォーマットではフレームレートが保持されます。フレームレートを知っているのはあなた自身ですから、「raspividへのキャプチャFPS指定」と「h264→mp4変換へのFPS指定」を組み合わせることで、正しいフレームレート情報が含まれた動画ファイルを生成できます。 ※: 厳密にはH.264 BitstreamでもFPSを格納するオプション的なフィールドは存在しますが、該当フィールドを正しく読み書きするかはアプリケーション依存です。大抵は無視されるようです。 実環境を所有していないため単なる推測ですが、所望されている高フレームレート(180fps)は期待通りに動作しないはずです。カメラモジュール仕様 もあわせて参照ください。