Êàê ýêñòðàãèðîâàòü àóäèîäîðîæêó èç AVI ôàéëà?

Previous  Top  Next

    
 

 

 

Code:

uses

{...}, vfw;

 

var

abort: Boolean;

 

{$R *.DFM}

 

{Special thanks to Jailbird, who developed a big part of this Code

Please download th vfw.pas first }

{The 'SaveCallback' function allows the user to get the

process status and abort the save progress. This function

needn't to call by the user.}

 

function SaveCallback(nPercent: Int): Bool; pascal;

begin

Application.ProcessMessages;

 

Form1.Progressbar1.Position := nPercent;

//Save Status in Percent

if abort = True then

   Result := True   

else                //If then function returns "True", the Process will continue

   Result := False; 

end;                  //If it returns "False" the process will abort

 

{The following function needs two parameters:

 

InputFile: PChar

Enter a Dir + Filename of a AVI File.

 

OutputFile: PChar

Enter a Dir + Filename of a WAVE File where do you want to

put the audiodata of the movie.

 

TIP:

Enter jus a Filename of a WAVE File if the audiodata of the

movie is in uncompressed PCM Format.

 

###########################################################

 

IMPORTANT:

Before calling the 'ExtractAVISound' function be sure that the

Inputfile has a audiotrace.

}

 

function TForm1.ExtractAVISound(InputFile, Outputfile: PChar): Boolean;

var

PFile: IAviFile;

PAvi: IAviStream;

plpOptions: PAviCompressOptions;

begin

Abort := False;

 

if Fileexists(StrPas(Outputfile)) then

begin

   case MessageDlg('Ausgabedatei existiert bereits. Überschreiben?',

     mtWarning, [mbYes, mbNo], 0) of

     mrYes: 

       begin

         DeleteFile(StrPas(Outputfile));

       end;                            

     //Important because the function overwrite just

     //the part of the file which is needed.

     mrNo: 

       begin

         Exit;

       end;

   end;

end;

 

try           

   AviFileInit;  //Init the API

   if AviFileOpen(PFile, Inputfile, 0, nil) <> 0 then

   begin                                               //Opens a AVI File

     MessageDlg('Fehler beim laden des Videos.

     Möglicherweise wird die Datei von einem anderen Prozess verwendet.'

       + #13#10 +

       'Schließen Sie alle in Frage kommenden Anwendungen und versuchen Sie es erneut.',

       mtError, [mbOK], 0);

     Result := False;

     Exit;

   end;

   if AviFileGetStream(PFile, PAvi, StreamTypeAudio, 0) <> 0 then

   begin

     MessageDlg(

       'Fehler beim laden des AudioStreams. Bitte überprüfen Sie, ob dieses Video über einen AudioStream verfügt.',

       mtError, [mbOK], 0);

     AviFileExit;

     Result := False;

     Exit;

   end;

   //Saves the AudioStream

   if AviSaveV(Outputfile, nil, @SaveCallback, 1, PAvi, plpOptions) <> 0 then

   begin

     MessageDlg('Fehler beim Speichern des AudioStreams oder Sie haben den Speichervorgang abgebrochen.',

       mtError, [mbOK], 0);

     AviStreamRelease(PAvi);

     AviFileExit;

     Result := False;

     Exit;

   end;

finally

   AviStreamRelease(PAvi);

   AviFileExit;

end;

Result := True; 

//return 'TRUE' if all right

end;

 

//Example how to call the function:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

if ExtractAVISound(PChar('D:\test.avi'), PChar('D:\test.wav')) = True then

   ShowMessage('Audio sucessfully saved');

else

   ShowMessage('Error while saving...');

end;

 

 

©Drkb::03604

Âçÿòî ñ ñàéòà http://www.swissdelphicenter.ch/en/tipsindex.php