Forum Clubic

[c++]concatenation de fichier vidéo

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

Tu devrais pour une programmation plus propre éventuellement d’abord fermer le descripteur de fichier de destination avant de le réouvrir en append.

Mois je ferais plutôt


- obtenir descripteur source
- obtenir descripteur destination
- copie source vers destination
- fermeture des descripteurs
- obtenir descripteur deuxième source
- obtenir descripteur destination en mode append
- copie deuxième source vers destination
- fermuture des descripteurs

cela me semble plus propre ainsi

Meme en fermant les fichiers, en fesant du code plus propre j’ai toujours mon probleme.

Je suis un peu rouillé en c++ car ce n’est pas mon language de prédilection mais ne serait-ce pas


std::ofstream file1( "C:\\..\\video.avi", std::ios_base::binary | std::ios_base::app)

ou quelque chose du genre avis aux amateurs de c++

JU’ai déjà essayer le code que tu m’a donner

Et qu’en je l’essaie il saute la 2ième boucle.
Le programme fait simplement la 1er copie.

tu inverses les parametres, c’est le mode d’ouverture (ios::in/out) puis le mode de lecture (ios::binary)

Si tu ouvres ton fichier de destination comme cela: ofstream dest("c:\…",ios::app,ios::binary); ça devrait fonctionner.

Correction


std::ofstream file1( "C:\\..\\video.avi", std::ios_base::out | std::ios_base::binary | std::ios_base::app)

voila la référence que j’ai trouvé si ça peut t’aider

J’ai trouver le probleme enfin je crois avoir trouver.

En faite sa copie la video a la suite.
Mais quand je lis la video il lit que la 1er partie, il n’arrive pas a lire la 2ième partie.

C’est normal, pour concaténer 2 vidéo il faut un logiciel dédié de retouche video genre virtualdub par exemple

petit tuto: recherche Join 2 AVI files dans cette page http://www.doom9.org/index.html?/virtualdub_procedures.htm

Je sait tres bien que des logiciels pour concaténer deux vidéo existe .

Moi je veux pouvoir le faire en code C++.

SI quelqu’un si connait merci beaucoup.

Il te faut une api c++ pour manipuler des fichiers .avi, car, en plus de concaténer les videos, il faut qu’elles soient au même format, il faut une maj de la durée etc…

>http://www.gamedev.net/reference/programming/features/avifile/