[Ce que je l'ai fait]Comment référencer le décodage de la trame par ffmpeg?
Je suis en train de mesurer une performance des différents décodeurs ffmpeg par
- moment combien de temps l'appel à la fonction
avcodec_decode_video2(..)
prend en ffmpeg.c et en cours d'exécution binaire ffmpeg la manière suivante
~/bin/ffmpeg -benchmark_all -loglevel debug -threads 0 -i ~/Documents/video-input.h264 -c:v libx265 -x265-params crf=25 video-output.hevc
- et en chronométrant combien de temps e e même fonction prend en ffplay.c et exécute le binaire ffplay la manière suivante
~/bin/ffplay ~/Documents/video-input.h264
Dans ma compréhension le temps moyen de l'appel à cette fonction devrait être le même si je suis en train de convertir la vidéo ou le jouer, parce que je mesure seulement combien de temps il faut pour décoder le cadre pour cette vidéo. Est-ce une mauvaise façon de le faire? S'il vous plaît laissez-moi savoir si je suis incorrect. Les résultats que je reçois me sont étranges - l'appel à la fonction mentionnée ci-dessus prend deux fois plus de temps dans le binaire ffmpeg que dans le binaire ffplay. J'ai essayé d'exécuter ffmpeg binaire avec -threads 0
et sans elle, mais les résultats sont toujours les mêmes (deux fois plus long que ffplay). Se pourrait-il que ffplay binaire utilise simplement plus de threads? Lorsque je tente avec -threads 1
, ffmpeg prend environ 10 fois plus longtemps que ffplay (ce qui me semble logique car avant qu'il utilisait plusieurs threads et maintenant il ne fait qu'utiliser 1)
Avant de poser ma question, je veux que vous savoir que je suis un débutant dans les processus de traitement vidéo et de codage/décodage vidéo.
[Ma question]
Je me demande ce qui serait un moyen précis de mesurer combien de temps il faut pour décoder un cadre (en utilisant 1 fil)? Devrais-je simplement mesurer seulement combien de temps il faut pour appeler la fonction avcodec_decode_video2(..)
en utilisant le binaire ffmpeg, et non le binaire ffplay? Les résultats seraient-ils plus précis de cette façon? J'ai également essayé d'activer les options -benchmark_all -loglevel debug
, mais il semble que le message suivant bench: 64537 decode_video 0.0
n'est pas très utile si 0.0 est censé signifier l'heure. (Je ne sais pas ce que signifie l'autre chiffre).
Il est peut-être la peine d'expliquer la différence entre les différents temps - le temps « réel » est probablement pas pour les comparaisons les plus utiles que ce dépend de la charge du système, des coeurs disponibles, etc. – Mick
Un moyen plus facile d'ignorer les flux est '-an' pour ignorer les flux audio, ou' -vn' pour ignorer les flux vidéo. –
@PeterCordes Je préfère '-map' car il est plus flexible et vous pouvez choisir (ou exclure) des flux spécifiques. – LordNeckbeard