Rechercher : dans
Par :

[c++] concaténation fichier vidéo

Dernière réponse le 17 fév 2008 à 10:18:31 kain31, le 22 mar 2007 à 11:41:35 
 Signaler ce message aux modérateurs

Bonjour tout le monde

Voila mon probleme j'arrive a copier un fichier dans un autre mais quand je veux concatener un fichier avec un aute, c'est à dire rajouter en fin de fichier un autre fichier il y a un probleme.

il ne me rajoute pas en fin de fichier il fait simplement une copie pourtant je lui dis de rajouter a la fin.

Je travail avec des fichier vidéo.

Voici le code pour la copie et la concaténation

//copie du fichier source
std::ifstream source( "C:\\..\\video0.avi",std::ios_base::binary );
std::ofstream destination( "C:\\..\\video.avi",std::ios_base::binary );
char buff[4096];
while ( !source.eof() )
{
source.read ( buff, sizeof( buff ) );
destination.write ( buff, source.gcount() );
}

//on rajoute le fichier file a file1
std::ifstream file( "C:\\...\\video1.avi",std::ios_base::binary );
//ouverture avec ajout en fin de fichier 
std::ofstream file1( "C:\\..\\video.avi", std::ios_base::binary,std::ios_base::app); 


while ( !file.eof() )
{
file.read ( buff, sizeof( buff ) );
file1.write ( buff, file.gcount() );
}


Merci tout le monde
Configuration: Windows XP
Internet Explorer 6.0

1

Char Snipeur, le 22 mar 2007 à 14:46:13

Sans être méchant, tu est tordu.
Pourquoi rouvrir le fichier video1.avi dans file1 alors qu'il l'es déjà dans destination, et en plus pointant à la fin du fichier.
Est tu sur que le ::...::app place le "curseur" d'écriture à la fin du fichier?
Je ne sais pas ce que tu cherche à faire, mais il me semble que les fichiers video ont des entêtes, du coup, ça m'étonnerai beaucoup que ça fonctionne ! Salutation !
Char Snipeur

Répondre à Char Snipeur

2

kain31, le 22 mar 2007 à 15:53:40

Ce que je cherche a faire, je te l'explique.

Je possède deux vidéo et je souhaiterais copier c'est deux video dans un autre fichier video.

Donc dans un premier temps je doit copier un fichier dans le fichier destination puis rajouter a ce fichier le deuxième fichier.

Mais je c'est pas comment faire pour concatener.

Répondre à kain31

3

Char Snipeur, le 23 mar 2007 à 08:39:13

Essai ça :

//copie du fichier source
std::ifstream source( "C:\\..\\video0.avi",std::ios_base::binary );
std::ofstream destination( "C:\\..\\video.avi",std::ios_base::binary );
char buff[4096];
while ( !source.eof() )
{
source.read ( buff, sizeof( buff ) );
destination.write ( buff, source.gcount() );
}

//on rajoute le fichier file a file1
std::ifstream file( "C:\\...\\video1.avi",std::ios_base::binary );


while ( !file.eof() )
{
file.read ( buff, sizeof( buff ) );
destination.write ( buff, file.gcount() );
}

Ensuite, ton fichier video.avi contiendra bien les deux autre concaténer, c'est à dire écri à la suite l'un de l'autre. (regarde la taille final)
Par contre, si tu souhaite coller deux video ensemble l'une derrière l'autre avec comme but de les lire à la suite en une seul fois par le biai d'un lecteur type winamp : à mon avis ça ne marchera pas.
Si c'est ça que tu veu faire, prend un logiciel de montage video, tu t'enmerdera moins, et ça prendra moins de temps. Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

4

kain31, le 23 mar 2007 à 09:23:56

Merci beaucoup du code.

Mais en effet sa concatene mais impossible a lire apres et moi j'aimerais pouvoir faire un code qui me permet de concatener deux video.

Donc si quelqu'un sait comment faire, sa m'aiderait beaucoup

merci

Répondre à kain31

5

Stupeflip, le 23 mar 2007 à 11:00:39

Salut,

Tu te rends compte que tu devras décoder les deux vidéos avant ? Ne serait-ce que pour virer les en-têtes. Puis les mettre à la suite et ré-encoder. Bref beaucoup de boulot au final pour garder une solution spécifique plutôt que d'utiliser un logiciel.

Répondre à Stupeflip

6

 erikr le rouge, le 17 fév 2008 à 10:18:31

La commande cat sous linux pourra t'aider, en tout cas en mpeg, ça fonctionne.

cat toto.mpeg tata.mpeg > toto.tata.mpeg

et zou, toto.tata.mpeg est la somme des deux fichiers précédants

Je suis hors délai, mais bon.... plus d'infos sur http://lists.ze-linux.org/2006-08/msg00149.html

Répondre à erikr le rouge