2013-01-02 8 views
9

Sto creando un segmenter che interviene nella funzione write_frame di ffmpeg e scrive i dati di output in file separati. Ogni file segmentato contiene segmenti di video di circa 3 secondi.Come controllare la generazione dei fotogrammi chiave di ffmpeg?

Il codice non seguente:

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 

parlare in generale, ogni segmento contiene almeno 3 secondi dati video, e comincia con un fotogramma chiave.

Il problema è che la durata del video in uscita sono molto diversi, alcuni contengono 3 secondi, alcuni contengono 5 o 6.

Ho il sospetto che il problema a causa di come ffmpeg generare fotogrammi chiave durante la transcodifica. Se la "distanza" tra due fotogrammi chiave adiacenti è 6s, ho un segmento di 6 secondi.

Ecco le mie domande:

  1. è che vero che ffmpeg generare fotogrammi chiave a intervalli irregolari (e l'intervallo di tempo può essere fino a pochi secondi (ad esempio 6)

  2. Come possiamo.? controllare la generazione fotogramma chiave ffmpeg? (credo ci dovrebbe essere l'argomento di un comando ffmpeg per questo, -force_key_frames forse, ma non sono sicuro)

+0

Ciao jAckOdE, hai risolto questo problema? Sto affrontando questo stesso problema ora. –

+0

È stato qualche anno fa, non riesco a ricordare cosa esattamente avevo fatto. Ma l'idea è di giocare con la forzatura del fotogramma chiave da generare a determinati intervalli (per favore google for -force_key_frame) FFmpeg potrebbe essere cambiato da allora è meglio fare riferimento all'ultimo documento. Spero che aiuti – jAckOdE

+0

Ok controllerò, grazie jAckOdE –

risposta

11
  1. È possibile che ffmpeg generi frame chiave a intervalli irregolari, in base al rilevamento del cambio di scena.

  2. intervallo di frame chiave può essere controllato dalla dimensione GOP. le seguenti opzioni possono essere usate

-g (FFmpeg) intervallo fotogramma chiave, noto anche come lunghezza del GOP. Questo determina la distanza massima tra I-frame. Lunghezze GOP molto elevate si tradurranno in una compressione leggermente più efficiente, ma renderà la ricerca nel video un po 'più difficile.

-keyint_min (FFmpeg) Lunghezza GOP minima, la distanza minima tra I-frame.

+0

Dove devo impostare il valore "-keyint_min" con il mio codice. –