J'utilise ffmpeg pour générer des aperçus d'images à partir de vidéos flv. Le système d'exploitation est Debian 5 et c'est la version apt de ffmpeg. Les fichiers flv se trouvent sur un partage NAS monté en tant que NFS. Obtenir les vignettes depuis le début du format FLV est assez rapide mais très lent lorsque vous recherchez plus de 10 minutes de vidéo. J'appelle ffmpeg depuis python comme ceci:
os.system('ffmpeg -ss "%d" -i %s -an -r 1 -vframes 1 -bufsize 1835k -s 360x288 -f image2 -vcodec mjpeg -y "%s"'%(offset_seconds, video_file_path, image_path))
Existe-t-il un moyen d’accélérer le processus de recherche vers la fin du flv? Qu'est-ce qui pourrait le rendre si lent?
J'ai essayé la même chose sur mon ordinateur local (Mac OS X Snow Leopard avec ffmpeg compilé à partir des sources) et je ne ressens aucune différence de vitesse lors de la capture d'images à partir du début de la vidéo et après 50 minutes de création.
Edit: Le serveur Debian mentionné a une configuration matérielle plus rapide que ma machine locale.
--start-time
option pour passer à une heure spécifique.Réponses:
Vous avez réduit le problème au montage NFS. ffmpeg lui-même ne change pas son comportement 10 minutes après le début de la vidéo d'entrée. Si c'était le cas, vous l'auriez remarqué lorsque vous avez essayé de lire une vidéo sur un disque local.
Je parie que l’installation et l’exécution de ffmpeg sur le serveur NFS (c’est donc à nouveau un disque local) n’indiqueraient pas un ralentissement de 10 minutes.
Il existe peut-être un moyen d’ajuster la configuration NFS (mise en cache?), Mais il est probablement plus simple de simplement copier la vidéo entière sur un disque local, puis de le lire avec ffmpeg. Cela ne sera pas plus lent: les données doivent de toute façon être déplacées, car bien que ffmpeg n'ait besoin que des pixels d'une image par seconde pour créer les vignettes, il doit en lire beaucoup plus entre (images clés) pour atteindre et décoder ces quelques images. cadres.
la source