2013-01-02 11 views
9

私はffmpegのwrite_frame関数に介入し、出力データを別々のファイルに書き込むセグメンタを作っています。セグメント化された各ファイルには、約3秒のビデオセグメントが含まれています。ffmpegのキーフレーム生成を制御する方法は?

コードは以下のん:

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秒が含まれている、非常に異なっているいくつかの問題がその原因ffmpegのは、トランスコーディング中にキーフレームを生成する方法に5または6

私は疑いを含有していることです。隣接する2つのキーフレーム間の「距離」が6秒の場合、6秒のセグメントが得られます。ここで

は私の質問です:。

  1. は真のffmpegのは、不規則な間隔(インターバル時間にキーフレームを生成することが例えば(第2数6)までにできることである

  2. どうやってできますか?

+0

こんにちはjAckOdE、この問題を修正しましたか?私は今この同じ問題に直面している。 –

+0

数年前になって、私は何をしたのか思い出すことができません。しかし、アイデアはキーフレームを強制的に特定の間隔で生成するようにしています(-force_key_frameのためにgoogleをお願いします)。FFmpegはその後変更されている可能性があります。希望する – jAckOdE

+0

私は確認します、ありがとうjAckOdE –

答えて

11
    (多分-force_key_frames、私はこのためのffmpegのコマンドの引数がなければならないと思いますが、私はよく分からない)?ffmpegのキーフレームの生成を制御します
  1. シーンチェンジの検出に基づいて、ffmpegが不規則な間隔でキーフレームを生成することは可能です。

  2. GOPサイズでキーフレーム間隔を制御できます。以下のオプションはまた、GOPの長さとして知ら

-g(FFmpegの) キーフレーム間隔を、使用することができます。これにより、Iフレーム間の最大距離が決まります。 GOPの長さが非常に長いと効率的な圧縮が若干行われますが、ビデオのシークはやや難しくなります。

-keyint_min(FFmpeg) 最小GOP長、Iフレーム間の最小距離。

+0

私のコードで " - keyint_min"の値を設定する必要があります。 –

関連する問題