ffmpeg
を使用して一連のフレームを画像として出力する場合、 ドキュメントを見つけることができる唯一の形式 はframe_%d.jpg
です。 %d
識別子は、シーケンシャルフレームカウントに置き換えられます。
出力ファイル形式で使用できる他のパラメーターはありますか?具体的には、特定のフレームのタイムスタンプを追加する機能が必要です。
この動作は、その時点ではまだ実装されていませんでした。
FFmpegのフォークに%t
サポートの初期バージョンを実装し( https://github.com/yuvadm/FFmpeg )、現在パッチのクリーンアップに取り組んでいます。アップストリームにマージできます。
strftime
オプション を使用すると、日付と時刻の情報を使用してファイル名を展開できます。構文については strftime()関数のドキュメント を確認してください。
たとえば、strftime()から画像ファイルを生成するには%Y-%m-%d_%H-%M-%S
pattern、次のffmpegコマンドを使用できます。
ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
映画の時間に基づいてファイル名を作成するbashスクリプトをハックしました。ファイル名に「hh_mm_ss」という形式を使用します。あなたはそれを見ることができます:
フレーム数については、特別なデバッグモードでレポートを使用できます。
FFREPORT=file=\'file.log\':level=48 && ffmpeg ... -vf select=eq(pict_type\,PICT_TYPE_I) -vsync vfr -f image2 OUTPUT
次に、名前をpreg_match_all
と一致させることができます。
preg_match_all("/] n:(\\d+)\\.[^>]+pict_type:I/Us",$log,$m,PREG_PATTERN_ORDER,5000);
$frames=$m[1];
お楽しみください!
もう1つのオプションは、ffprobe -show_packetsを実行し、そのデータを使用して、生成された各jpgファイルのタイムスタンプを「推測」することです(着信ビデオフレームごとに1つ生成すると仮定します)。うわぁ!