1

J'essaie d'extraire et d'analyser des fichiers mp4 plus rapidement qu'en temps réel car je n'ai pas besoin de toutes les images.Extraction de trame rapide à partir de fichiers mp4 sous UWP

J'ai essayé suivante:

composition.GetThumbnailAsync(TimeSpan.FromSeconds(i),160,90,VideoFramePrecision.NearestKeyFrame); 

qui m'a donné au sujet 1FPS avant tout traitement.

mediaPlayer.PlaybackSession.PlaybackRate = x; 

où x fonctionnerait différemment pour chaque vidéo; parfois jouerait une lecture lisse à 60fps jusqu'à x = 2, mais sur d'autres cela donnerait 1 fps.

Les meilleurs résultats ont été avec MediaPlayer mise mediaPlayer.IsVideoFrameServerEnabled = true; avec mediaPlayer.StepForwardOneFrame(); dans mediaPlayer_VideoFrameAvailable

Cela assurerait tous les cadres suivants sont arrivés après chacun est réellement fait (pour le meilleur ou pire selon le dossier), mais gaspille encore ressources que je reçois chaque image, et ont besoin de chaque> 5ème image.

Je pense que tout cela est lié à des images clés ou des images "I" dans la vidéo, mais je ne vois pas qu'il existe un moyen de les obtenir uniquement.

Des idées pour obtenir des images plus rapidement en sautant n images à la fois?

Répondre

1

Il n'y a pas de manière plus efficace d'obtenir chaque nième trame. Vous pouvez définir la position sur chaque nième image, mais l'algorithme de recherche recherche l'image clé précédente la plus proche, puis décode à partir de là. Pour cette raison, vous pouvez décoder plus d'images en définissant la Position. Vous économisez donc du temps en décodant chaque image via l'étape du cadre. Il n'y a pas de moyen facile d'utiliser le MediaPlayer pour chercher une image-clé. Vous devez analyser le fichier h.264 pour obtenir la distance entre les images clés, puis définir la position à cette cadence.