2009-03-24 6 views
4

J'essaie d'utiliser gstreamer 0.10 à partir de Python pour afficher simultanément une source vidéo v4l2 et l'enregistrer sur xvid-in-avi. Sur une longue période de temps, l'ordinateur serait assez rapide pour le faire, mais si un autre programme utilise le disque, il perd des images. C'est déjà assez grave, mais à la lecture, il y a des bouffées de mouvement dans la vidéo où les images ont été supprimées au lieu d'afficher les images que nous pouvions encoder à un taux de framerate inférieur.Comment puis-je enregistrer une vidéo en direct avec gstreamer sans abandonner les images?

Le pipeline est v4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesink et le tee est également réduit à queue ! xvimagesink sync=false. J'ai essayé d'ajouter videorate devant xvidenc mais cela semble empirer les choses.

J'ai envisagé de mettre en file d'attente la vidéo non compressée sur le disque dans ce pipeline et de l'encoder dans un thread d'arrière-plan. Que pouvais-je faire d'autre pour résoudre ce problème? Est-ce que xvidenc ou avimux fait la mauvaise chose avec des images perdues? Puis-je augmenter considérablement la taille de la file d'attente précédant mon encodeur?

Répondre

5

tee bloquera si les blocs de sortie, donc c'est probablement votre goulot d'étranglement. Je suggère d'écrire le flux qui prend plus de temps à encoder sur le disque et à encoder à partir de là.

+0

Comment qualifieriez-vous morceau de la sortie de sorte que chaque morceau peut être supprimé dès qu'il a été transcodé? – joeforker

+1

J'ai fini par passer au mouvement jpeg. La compression est terrible mais elle ne surcharge pas le CPU. – joeforker

1

et vous devez écrire xvimagesink, pas xvimagesync

+0

une erreur d'orthographe simple – joeforker

Questions connexes