OpenCV ne pas enregistrer la vidéo
J'utilise le code suivant pour lire une vidéo à partir d'un fichier, d'appliquer le savant bord de l'algorithme et de l'écriture de la modification de la vidéo vers un fichier. Le code compile et s'exécute parfaitement. Mais, la vidéo n'est pas écrit! Je suis tout à fait confus. S'il vous plaît dites-moi quelle est l'erreur.
Le fichier n'est pas créé à tous les! OS: Ubuntu 12.10
Code pour l'écriture dans le fichier de sortie
De l'ouverture du fichier de sortie
bool setOutput(const std::string &filename, int codec=0, double framerate=0.0, bool isColor=true) {
outputFile= filename;
extension.clear();
if (framerate==0.0)
framerate= getFrameRate(); //same as input
char c[4];
//use same codec as input
if (codec==0) {
codec= getCodec(c);
}
//Open output video
return writer.open(outputFile, //filename
codec, //codec to be used
framerate, //frame rate of the video
getFrameSize(), //frame size
isColor); //color video?
}
De l'écriture de la trame
void writeNextFrame (Mat& frame)
{
writer.write (frame);
}
Et il y a une autre méthode qui exécute ces
quelle est la taille du fichier de sortie? est-il plus grand que 0?le fichier créé à tous?
Le fichier n'est pas créé
aussi je ne vois pas où tu te rincer la sortie et fermer le flux de données
il ne à la ligne: le retour de l'écrivain.ouvert (outputFile, codec, fréquence d'images, getFrameSize (), isColor);
Affichage de l'ensemble de votre programme ne sera pas vous aider à obtenir des réponses. L'idée est d'inclure uniquement les pièces nécessaires.
Le fichier n'est pas créé
aussi je ne vois pas où tu te rincer la sortie et fermer le flux de données
il ne à la ligne: le retour de l'écrivain.ouvert (outputFile, codec, fréquence d'images, getFrameSize (), isColor);
Affichage de l'ensemble de votre programme ne sera pas vous aider à obtenir des réponses. L'idée est d'inclure uniquement les pièces nécessaires.
OriginalL'auteur pratnala | 2012-11-10
Vous devez vous connecter pour publier un commentaire.
Chaque fois que je rencontre des comportements étranges dans mes applications, j'écris un bref, autonome, correct (compilable), exemple pour m'aider à comprendre ce qu'il se passe.
J'ai écrit le code ci-dessous pour illustrer ce que vous devriez faire. Il est intéressant de noter qu'il fonctionne parfaitement sur mon Mac OS X:
L'inspection du fichier d'entrée avec FFmpeg révèle (
ffmpeg -i Wildlife.avi
):et la sortie:
De sorte que le seul changement notable entre les deux fichiers, c'est que la sortie générée par OpenCV ne dispose pas d'un flux audio, qui est le bon comportement depuis OpenCV ne pas traiter de l'audio.
Assurez-vous que votre utilisateur a la permission de lire/écrire/exécuter dans le répertoire que vous exécutez l'application. Aussi, les debugs j'ai ajouté le code sera probablement vous aider à trouver les problèmes liés à l'entrée/la sortie de capture.
!!! Output video can't be opened
qui vous ont, heureusement, insérée. Donc je suppose que c'est ça le problème. Et, d'ailleurs je suis le seul utilisateur et donc l'administrateur et que ces fichiers sont situés dans le dossier Documents du Répertoire de baseTrouvé le problème. J'ai été en utilisant un fichier mov tous ce fichier et c'est pourquoi elle na pas écrire. J'ai utilisé un fichier avi et cela a fonctionné. Comment le faire fonctionner avec un fichier mov? Toutes mes vidéos de test sont dans le format mov. EDIT: j'ai essayé mp4 et même ce qui ne fonctionne pas
AVI/MOV/MP4 sont des conteneurs uniquement et OpenCV sait comment les lire. Le vrai problème est le format dans lequel les données sont emballés à l'intérieur de ces conteneurs (codec). Votre .les fichiers mov peut-être l'aide d'un codec qui n'est pas pris en charge par OpenCV. Utiliser un outil 3ème partie pour modifier le codec de l'un de vos .mov fichiers et essayez de nouveau.
Mon .les fichiers mov sont enregistrés à partir de l'iPod camera et .les fichiers mp4 à partir de la webcam de mon ordinateur portable sous Windows 8. Ils utilisent certains codecs propriétaire qui OpenCV ne sais pas comment le lire?
Btw, le fichier d'entrée est ouvert et lu (pas d'erreur). Seul le fichier de sortie n'est pas être ouvert (et donc, pas écrites).
OriginalL'auteur karlphillip
avez-vous de la bibliothèque FFMPEG installé sur votre machine? Sur Linux FFMPEG est utilisé pour écrire des vidéos sur Windows FFMPEG ou VFW est utilisé. vérifier par la commande
essayez d'installer d'autres bibliothèques
sudo apt-get install libavformat-dev libswscale-dev
.Et par l'appel de l'écrivain.ouvrez vous n'Initialise ou réinitialise la vidéo de l'écrivain.Vous devez appeler le vide VideoWriter::write(const Mat& image) pour l'écriture de la prochaine trame de la vidéo vers un fichier. J'espère que cela va fonctionner.
ffmpeg
n'était pas installé. Donc, je l'ai installé à l'aide desudo apt-get install ffmpeg
. Il ne peut toujours pas écrire sur le disque. Bien que le terminal ditOutput #0, mp4, to 'videolala.mp4': Stream #0.0: Video: [0][0][0][0] / 0x0000, yuv420p, 720x480, q=2-31, 22118 kb/s, 90k tbn, 42 tbc
. Etffmpeg -version
donneffmpeg version 0.8.4-6:0.8.4-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
. Il dit aussiThe program is deprecated
essayez cette commande sudo apt-get install libavformat-dev libswscale-dev
Les deux sont déjà installées
ouais
VideoWriter::write
est appelée dans une autre fonction. Ont ajouté que le code de tropOriginalL'auteur isrish
J'ai eu le même problème et j'ai changé les codecs pour DIVX. Maintenant, la vidéo est enregistrée dans les deux .avi et .mp4 formats.
OriginalL'auteur Pathum