2013-01-02 3 views
9

Je crée un segment qui intervient dans la fonction write_frame de ffmpeg et écrit les données de sortie dans des fichiers séparés. Chaque fichier segmenté contient un segment d'environ 3 secondes de vidéo.Comment contrôler la génération d'images-clés de ffmpeg?

Le code ne suit:

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 

parlant général, chaque segment contient au moins 3 secondes de données vidéo, et il commence par une image clé.

Le problème est que la durée de sortie vidéo sont très différents, certains contiennent 3 secondes, certains contiennent 5 ou 6.

Je soupçonne que le problème en raison de la façon dont ffmpeg génèrent des images clés au cours de transcoder. Si la "distance" entre deux images clés adjacentes est 6s, j'ai un segment de 6 secondes.

Voici mes questions:

  1. est-ce vrai que ffmpeg générer des images clés à des intervalles irréguliers (et l'intervalle de temps peut être jusqu'à quelques secondes (par exemple 6)

  2. Comment pouvons-nous.? contrôler la génération d'images clés ffmpeg? (je suppose qu'il devrait y avoir l'argument d'une commande ffmpeg pour cela, peut-être -force_key_frames, mais je ne suis pas sûr)

+0

Salut jAckOdE, avez-vous résolu ce problème? Je suis confronté à la même question maintenant. –

+0

Il y a quelques années, je ne me rappelle plus exactement ce que j'avais fait. Mais l'idée est de jouer avec le forçage de l'image clé à générer à un certain intervalle (s'il vous plaît google pour -force_key_frame) FFmpeg peut avoir changé depuis lors, vous feriez mieux de consulter le dernier document. J'espère que cela aidera – jAckOdE

+0

Ok, je vais vérifier, merci jAckOdE –

Répondre

11
  1. Il est possible que ffmpeg génère une image clé à intervalles irréguliers, en fonction de la détection de changement de scène.

  2. L'intervalle d'image clé peut être contrôlé par taille GOP. les options suivantes peuvent être utilisées

-g (FFmpeg) intervalle d'images clés, aussi connu comme la longueur du GOP. Cela détermine la distance maximale entre les images I. Des longueurs de GOP très élevées entraîneront une compression légèrement plus efficace, mais rendront la recherche dans la vidéo un peu plus difficile.

-keyint_min (FFmpeg) Longueur minimale de GOP, distance minimale entre les images I.

+0

Où je dois définir la valeur "-keyint_min" avec dans mon code. –

Questions connexes