Title: extract the audio stream from an AVI file?
uses
{...},vfw;
var
abort:Boolean;
{$R*.DFM}
{VielenDankanJailbird,dereinengroenTeildiesesCodesentwickelthat
SpecialthankstoJailbird,whodevelopedabigpartofthisCode}
{Bittezuerstdievfw.pasdownloaden
Pleasedownloadthvfw.pasfirst}
{Die'SaveCallback'FunktionerlaubtesdemBenutzerden
aktuellenProzessStatuszuerfahrenunddenSpeichervorgang
vorzeitigabzubrechen.DieseFunktionmussNICHTvomBenutzer
aufgerufenwerden.
The'SaveCallback'functionallowstheusertogetthe
processstatusandabortthesaveprogress.Thisfunction
needn'ttocallbytheuser.}
functionSaveCallback(nPercent:Int):Bool;pascal;
begin
Application.ProcessMessages;
Form1.Progressbar1.Position:=nPercent;//SpeicherStatusinProzent
//SaveStatusinPercent
ifabort=Truethen
Result:=True//WenndieFunktion"True"zurckgibt,wirdderSpeichervorgangfortgesetzt.
else//Ifthenfunctionreturns"True",theProcesswillcontinue
Result:=False;//Gibtsie"False"zurckwirdderVorgangabgebrochen
end;//Ifitreturns"False"theprocesswillabort
{DiefolgendeFunktionerwartetzweiParameter:
Inputfile:PChar
GebenSiehierdiedieAVIDateianauswelcheSie
dieAudiospurextrahierenmchten.
Outputfile:PChar
GebenSieeinenPfad+DateinameneinerWAVEDateian.
IndieseDateiwirddieAudioSpurgespeichert.
HINWEIS:
GebenSienureineWAVEDateialsAusgabedateianwenn
dieAudiodateninderAVIDateiunkomprimiert(alsPCMWAVE)
vorliegen.
####################################################
Thefollowingfunctionneedstwoparameters:
InputFile:PChar
EnteraDir+FilenameofaAVIFile.
OutputFile:PChar
EnteraDir+FilenameofaWAVEFilewheredoyouwantto
puttheaudiodataofthemovie.
TIP:
EnterjusaFilenameofaWAVEFileiftheaudiodataofthe
movieisinuncompressedPCMFormat.
###########################################################
WICHTIG:
StellenSievordemaufrufenderFunktion'ExtractAVISound'sicher
dasdieEingabedatei(Inputfile)bereineAudioSpurverfgt.
IMPORTANT:
Beforecallingthe'ExtractAVISound'functionbesurethatthe
Inputfilehasaaudiotrace.
}
functionTForm1.ExtractAVISound(InputFile,Outputfile:PChar):Boolean;
var
PFile:IAviFile;
PAvi:IAviStream;
plpOptions:PAviCompressOptions;
begin
Abort:=False;
ifFileexists(StrPas(Outputfile))then
begin
caseMessageDlg('Ausgabedateiexistiertbereits.berschreiben?',
mtWarning,[mbYes,mbNo],0)of
mrYes:
begin
DeleteFile(StrPas(Outputfile));//Wichtig,dadieFunktionsonstnursovielder
end;//Dateiberschreibtwiegebrauchtwird.
//Importantbecausethefunctionoverwritejust
//thepartofthefilewhichisneeded.
mrNo:
begin
Exit;
end;
end;
end;
try//InitialisiertdieAPI
AviFileInit;//InittheAPI
ifAviFileOpen(PFile,Inputfile,0,nil)0then//ffneteineAVIDatei
begin//OpensaAVIFile
MessageDlg('FehlerbeimladendesVideos.
MglicherweisewirddieDateivoneinemanderenProzessverwendet.'
+#13#10+
'SchlieenSiealleinFragekommendenAnwendungenundversuchenSieeserneut.',
mtError,[mbOK],0);
Result:=False;
Exit;
end;
ifAviFileGetStream(PFile,PAvi,StreamTypeAudio,0)0then
begin
MessageDlg(
'FehlerbeimladendesAudioStreams.BitteberprfenSie,obdiesesVideobereinenAudioStreamverfgt.',
mtError,[mbOK],0);
AviFileExit;
Result:=False;
Exit;
end;
//SpeichertdenAudioStream
//SavestheAudioStream
ifAviSaveV(Outputfile,nil,@SaveCallback,1,PAvi,plpOptions)0then
begin
MessageDlg('FehlerbeimSpeicherndesAudioStreamsoderSiehabendenSpeichervorgangabgebrochen.',
mtError,[mbOK],0);
AviStreamRelease(PAvi);
AviFileExit;
Result:=False;
Exit;
end;
finally
AviStreamRelease(PAvi);
AviFileExit;
end;
Result:=True;//'TRUE'zurckgebenwennallesgeklappthat
//return'TRUE'ifallright
end;
//BeispielzuaufrufenderFunktion:
//Examplehowtocallthefunction:
procedureTForm1.Button1Click(Sender:TObject);
begin
ifExtractAVISound(PChar('D:\test.avi'),PChar('D:\test.wav'))=Truethen
ShowMessage('Audiospurerfolgreichgespeichert!');//Audiosucessfullysaved
else
ShowMessage('FehlerbeimSpeichernderAudiospur.');//Errorwhilesaving...
end;