Je souhaite développer (DELPHI 6) ne petite application qui, à partir
d'un fichier AVI en fabrique un autre mais dans lequel j'ai fait tourner
de 90° les images.
J'utilise pour cela les fonctions de l'API "AVIFile32.dll".
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je
n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie
son du fichier d'origine pour la placer dans le fichier de sortie.
Si vous avez une expérience ou des exemples à me donner ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian ASTOR
ChP wrote:
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie son du fichier d'origine pour la placer dans le fichier de sortie.
AVIFileGetStream()
ChP wrote:
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je
n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie
son du fichier d'origine pour la placer dans le fichier de sortie.
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie son du fichier d'origine pour la placer dans le fichier de sortie.
AVIFileGetStream()
ChP
Christian ASTOR a écrit :
ChP wrote:
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie son du fichier d'origine pour la placer dans le fichier de sortie.
AVIFileGetStream()
Effectivement, j'en suis passé par là et cela fonctionne pour l'extraction. J'ai :
AVIFileOpen(PtrAVI, Pchar(Filename), OF_READ, nil); {Ouvre le fichier} AVIFileInfo(PtrAVI, FInfos, SizeOf(TAVIFileInfo)); {Infos sur fichier} AVIFILEGetStream(PtrAVI, PtrVideo, streamtypeVIDEO, 0); {Flux Vidéo} AVIFILEGetStream(PtrAVI, PtrAudio, streamtypeAUDIO, 0); {Flux Audio} ... for N:= 0 to NbTrame do {Récup Vidéo} AVIStreamGetFrame(ObjFrame, Frame); .... {Lecture Flux Audio} AVIStreamRead(PtrAudio, 0, Len, @MemSon[0], Len, @SizeSon, @SizeFrame);
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVIFileOpen(AVIFile,@Name[1],OF_CREATE or OF_WRITE,nil);{Créé fichier S} ... AVIFileCreateStream(AVIFile, AVIStream, AVIStreamInfo); {Flux vidéo} ... AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader)); ... for N:= 0 to NbTrame do (Ecriture flux vidéo} AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader)); ... {Ecriture du flux Audio} AVIFileCreateStream(AVIFile, PtrSon, InfosSon); with WaveStruc do begin wFormatTag:= 0; nChannels:= 1; nSamplesPerSec:= 7830 ; nAvgBytesPerSec:= 15600; nBlockAlign:= 2; end; Err1:= AVIStreamSetFormat(PtrSon, 0, @WaveStruc, SizeOf(TWaveStruc)); Err2:= AVIStreamWrite(PtrSon, 0, 1, @BandeSon[0], Length(BandeSon), 0, @NbS, @NbB);
Dans l'écriture du flux Audio, si je ne place pas l'instruction "AVIStreamSetFormat" --> "AVIStreamWrite" plante. Si je place l'instruction "AVIStreamSetFormat" --> "AVIStreamWrite" ne plante plus mais pour autant, le fichier résultant n'e comporte pas de son.
Par ailleurs, quelle est l'instruction qui permet de récupérer la structure "WAVEFORMAT" ou "WAVEFORMATEX".
Merci de votre aide.
Pierre
Christian ASTOR a écrit :
ChP wrote:
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je
n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie
son du fichier d'origine pour la placer dans le fichier de sortie.
AVIFileGetStream()
Effectivement, j'en suis passé par là et cela fonctionne pour
l'extraction. J'ai :
AVIFileOpen(PtrAVI, Pchar(Filename), OF_READ, nil); {Ouvre le fichier}
AVIFileInfo(PtrAVI, FInfos, SizeOf(TAVIFileInfo)); {Infos sur fichier}
AVIFILEGetStream(PtrAVI, PtrVideo, streamtypeVIDEO, 0); {Flux Vidéo}
AVIFILEGetStream(PtrAVI, PtrAudio, streamtypeAUDIO, 0); {Flux Audio}
...
for N:= 0 to NbTrame do {Récup Vidéo}
AVIStreamGetFrame(ObjFrame, Frame);
....
{Lecture Flux Audio}
AVIStreamRead(PtrAudio, 0, Len, @MemSon[0], Len, @SizeSon, @SizeFrame);
Mon problème est maintenant de placer ce flux audio dans le fichier de
sortie :
AVIFileOpen(AVIFile,@Name[1],OF_CREATE or OF_WRITE,nil);{Créé fichier S}
...
AVIFileCreateStream(AVIFile, AVIStream, AVIStreamInfo); {Flux vidéo}
...
AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader));
...
for N:= 0 to NbTrame do (Ecriture flux vidéo}
AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader));
...
{Ecriture du flux Audio}
AVIFileCreateStream(AVIFile, PtrSon, InfosSon);
with WaveStruc do
begin
wFormatTag:= 0;
nChannels:= 1;
nSamplesPerSec:= 7830 ;
nAvgBytesPerSec:= 15600;
nBlockAlign:= 2;
end;
Err1:= AVIStreamSetFormat(PtrSon, 0, @WaveStruc, SizeOf(TWaveStruc));
Err2:= AVIStreamWrite(PtrSon, 0, 1, @BandeSon[0], Length(BandeSon),
0, @NbS, @NbB);
Dans l'écriture du flux Audio, si je ne place pas l'instruction
"AVIStreamSetFormat" --> "AVIStreamWrite" plante. Si je place
l'instruction "AVIStreamSetFormat" --> "AVIStreamWrite" ne plante plus
mais pour autant, le fichier résultant n'e comporte pas de son.
Par ailleurs, quelle est l'instruction qui permet de récupérer la
structure "WAVEFORMAT" ou "WAVEFORMATEX".
En ce qui concerne la vidéo, j'ai réussi. Mon problème est que je n'arrive pas (je ne sais pas comment m'y prendre) à extraire la partie son du fichier d'origine pour la placer dans le fichier de sortie.
AVIFileGetStream()
Effectivement, j'en suis passé par là et cela fonctionne pour l'extraction. J'ai :
AVIFileOpen(PtrAVI, Pchar(Filename), OF_READ, nil); {Ouvre le fichier} AVIFileInfo(PtrAVI, FInfos, SizeOf(TAVIFileInfo)); {Infos sur fichier} AVIFILEGetStream(PtrAVI, PtrVideo, streamtypeVIDEO, 0); {Flux Vidéo} AVIFILEGetStream(PtrAVI, PtrAudio, streamtypeAUDIO, 0); {Flux Audio} ... for N:= 0 to NbTrame do {Récup Vidéo} AVIStreamGetFrame(ObjFrame, Frame); .... {Lecture Flux Audio} AVIStreamRead(PtrAudio, 0, Len, @MemSon[0], Len, @SizeSon, @SizeFrame);
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVIFileOpen(AVIFile,@Name[1],OF_CREATE or OF_WRITE,nil);{Créé fichier S} ... AVIFileCreateStream(AVIFile, AVIStream, AVIStreamInfo); {Flux vidéo} ... AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader)); ... for N:= 0 to NbTrame do (Ecriture flux vidéo} AVIStreamSetFormat(CompStream,0,@bmiHeader,SizeOf(TBitmapInfoHeader)); ... {Ecriture du flux Audio} AVIFileCreateStream(AVIFile, PtrSon, InfosSon); with WaveStruc do begin wFormatTag:= 0; nChannels:= 1; nSamplesPerSec:= 7830 ; nAvgBytesPerSec:= 15600; nBlockAlign:= 2; end; Err1:= AVIStreamSetFormat(PtrSon, 0, @WaveStruc, SizeOf(TWaveStruc)); Err2:= AVIStreamWrite(PtrSon, 0, 1, @BandeSon[0], Length(BandeSon), 0, @NbS, @NbB);
Dans l'écriture du flux Audio, si je ne place pas l'instruction "AVIStreamSetFormat" --> "AVIStreamWrite" plante. Si je place l'instruction "AVIStreamSetFormat" --> "AVIStreamWrite" ne plante plus mais pour autant, le fichier résultant n'e comporte pas de son.
Par ailleurs, quelle est l'instruction qui permet de récupérer la structure "WAVEFORMAT" ou "WAVEFORMATEX".
Merci de votre aide.
Pierre
Christian ASTOR
ChP wrote:
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVISaveV()
ChP wrote:
Mon problème est maintenant de placer ce flux audio dans le fichier de
sortie :
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVISaveV()
ChP
Christian ASTOR a écrit :
ChP wrote:
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVISaveV()
C'est un autre manière de fermer le fichier.
En fait, le problème venait du fait que j'utilisais la structure WAVEFORMAT au lieu de WAVEFORMATEX qui définit en plus le nombre de bits de codage du son.
Merci quand même.
Pierre
Christian ASTOR a écrit :
ChP wrote:
Mon problème est maintenant de placer ce flux audio dans le fichier de
sortie :
AVISaveV()
C'est un autre manière de fermer le fichier.
En fait, le problème venait du fait que j'utilisais la structure
WAVEFORMAT au lieu de WAVEFORMATEX qui définit en plus le nombre de bits
de codage du son.
Mon problème est maintenant de placer ce flux audio dans le fichier de sortie :
AVISaveV()
C'est un autre manière de fermer le fichier.
En fait, le problème venait du fait que j'utilisais la structure WAVEFORMAT au lieu de WAVEFORMATEX qui définit en plus le nombre de bits de codage du son.