ffmpegのwrite_frame関数に介入し、出力データを別々のファイルに書き込むセグメンターを作成しています。セグメント化された各ファイルには、約3秒のビデオのセグメントが含まれています。
コードは次のようになります。
1 - Get transcoded packet
2 - Check if it contains key frame data, if yes goto 3.
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4
4 - Close file, and create new segment, write packet to segment file, goto-1
一般的に、すべてのセグメントには少なくとも3秒のビデオデータが含まれ、キーフレームで始まります。
問題は、出力ビデオの長さが大きく異なり、3秒が含まれるものもあれば、5または6が含まれるものもあることです。
トランスコーディング中にffmpegがキーフレームを生成する方法に起因する問題が疑われます。2つの隣接するキーフレーム間の「距離」が6秒の場合、6秒のセグメントが得られます。
これが私の質問です:
ffmpegが不規則な間隔でキーフレームを生成するというのは本当ですか(そして間隔時間は最大数秒(例:6)になる可能性があります)?
ffmpegキーフレームの生成をどのように制御できますか?(これにはffmpegコマンドの引数があるはずです、-force_key_framesかもしれませんが、よくわかりません)