
|
|
Auteur
|
Message
|
1
|
|
|
|
Salut,
J'arrive à ouvrir un fichier AVI decompresser les frames pour obtenir des BMP (ou simplement un tableau de données) et recompresser ensuite ces frames pour avoir un nouveau fichier AVI par l'intermédiaire des méthodes AVIStreamGetFrame et AVIStreamWrite (dans le but d'appliquer des transformations aux images par la suite).
Mon problème est dans le stream audio, en effet, je ne souhaite pas modifier ce flux, je souhaiterai donc simplement le copier, j'aimerais donc creer une fonction du type "Add_Audio(PAVISTREAM stream_audio,PAVIFILE avi_file)" qui ajouterai le stream audio au fichier mais je ne vois pas du tout comment m'y prendre...
J'ai bien essayé d'appliquer la même méthode qu'avec le flux Vidéo mais beaucoup d'inconnues persistent, de plus, je ne souhaite pas traiter la piste audio, il n'est donc pas necessaire de la decomposer.
Merci d'avance de me libérer mon ignorance !
|
|
|
|
|
J'ai un peu avancer, et compris que le Header d'un streamAudio etait du type WAVEFORMATEX, à l'excution de ce code, un fichier d'une taille relativement petite (devrai etre autour des 3mo et ne fait que 293 ko) mais d'une durée correcte, je n'ai pas trouvé d'information sur la taille des frames de son :
Code :
void Add_Audio(char * Name,PAVISTREAM audio)
{
PAVIFILE avi_file;
AVIFileInit();
AVIFileOpen(&avi_file, Name, OF_WRITE | OF_CREATE, NULL);
//AVISTREAMINFO
AVISTREAMINFO avi_stream_info;
int a=AVIStreamInfo(audio, &avi_stream_info, sizeof(AVISTREAMINFO));
//WAVEFORMATEX
WAVEFORMATEX wave;
LONG lStreamSize = sizeof(wave);
AVIStreamReadFormat(audio, 0, &wave, &lStreamSize);
//Nouveau stream
PAVISTREAM newstream;
AVIFileCreateStream(avi_file, &newstream, &avi_stream_info);
AVIStreamSetFormat(newstream, 0, &wave, sizeof(wave));
int size=wave.cbSize; // Quel est la taille d'une frame son ?
unsigned char * trame=new unsigned char[size];
//Copie byte par byte
for(int i=AVIStreamStart(audio);i<AVIStreamEnd(audio);i++)
{
AVIStreamRead(audio,i,1,trame,size,NULL,NULL);
AVIStreamWrite(newstream,i,1,trame,size, AVIIF_KEYFRAME, NULL, NULL);
}
AVIStreamRelease(audio);
AVIStreamRelease(newstream);
AVIFileRelease(avi_file);
}
"int size=wave.cbSize;" j'ai de serieux doute sur cette taille, car elle est égale à 12 quand je debug, ce qui me parai peu...
|
|
|
|
|
PS : ce n'est pas byte par byte que je copie mais frame par frame...
Apparament, la trame ne change jamais dans la boucle...
-->Message édité par shadiest le 30/10/2005 15:53:52<--
|
|
|
|
|
|
mausvaise categroie: audio, video...
|
|
|
|
|
mauvaise categroie: audio, video... ?
|
|
|
|
|
J'ai trouver l'erreur, mais je ne sais comment la résoudre :
" AVIStreamRead(audio,i,1,trame,size,NULL,NULL); " me retourne AVIERR_BUFFERTOOSMALL
quel taille doit-je accorder au buffer ?
|
|
|
|
|
shadiest a écrit :
mauvaise categroie: audio, video... ?
beh ce qui concerne l'edition audio et video c'ets a mettre dans la categorie "creation photo video et audio"
|
|
|
|
|
Beno@ a écrit :
beh ce qui concerne l'edition audio et video c'ets a mettre dans la categorie "creation photo video et audio"
Oui, mais là c'est un script permettant de lire une video pour mettre sur un site donc je pense que le topic est bien posté.
-------
![[:jandre:1] [:jandre:1]](/data/globaldata/usmilies/jandre-1.gif) Il faut mieux en mettre plus que moins
|
|
|
|
|
hmmm
tu a raison, mais il est juste a cheval
|
|
|
|
|
C'est bien d'un projet cpp qu'il s'agit mais j'approche du but quant à mon problème, je cherche encore la réponse à :
J'ai trouver l'erreur, mais je ne sais comment la résoudre :
" AVIStreamRead(audio,i,1,trame,size,NULL,NULL); " me retourne AVIERR_BUFFERTOOSMALL
quel taille doit-je accorder au buffer ?
|
|
1
|
|

|

|