whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

67 Visitors Online


 
...extract the audio stream from an AVI file?
Autor: Horst Kniebusch
Homepage: http://www.the-admin.de.vu
[ Print tip ]  


Tip Rating (10):  
     


uses
{...}, vfw;

var
  
abort: Boolean;

  {$R *.DFM}

{Vielen Dank an Jailbird, der einen großen Teil dieses Codes entwickelt hat
 Special thanks to Jailbird, who developed a big part of this Code}

{Bitte zuerst die vfw.pas downloaden
 Please download th vfw.pas first }

{Die 'SaveCallback' Funktion erlaubt es dem Benutzer den
 aktuellen Prozess Status zu erfahren und den Speichervorgang
 vorzeitig abzubrechen. Diese Funktion muss NICHT vom Benutzer
 aufgerufen werden.

 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; //Speicher Status in Prozent
  //Save Status in Percent
  
if abort = True then
    
Result := True    //Wenn die Funktion "True" zurückgibt, wird der Speichervorgang fortgesetzt.
  
else                //If then function returns "True", the Process will continue
    
Result := False;  //Gibt sie "False" zurück wird der Vorgang abgebrochen
end;                  //If it returns "False" the process will abort


{Die folgende Funktion erwartet zwei Parameter:

 Inputfile: PChar
  Geben Sie hier die die AVI Datei an aus welche Sie
  die Audiospur extrahieren möchten.

 Outputfile: PChar
  Geben Sie einen Pfad + Dateinamen einer WAVE Datei an.
  In diese Datei wird die AudioSpur gespeichert.

  HINWEIS:
  Geben Sie nur eine WAVE Datei als Ausgabedatei an wenn
  die Audiodaten in der AVI Datei unkomprimiert (als PCM WAVE)
  vorliegen.

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

 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.

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

 WICHTIG:
  Stellen Sie vor dem aufrufen der Funktion 'ExtractAVISound' sicher
  das die Eingabedatei (Inputfile) über eine AudioSpur verfügt.

 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)); //Wichtig, da die Funktion sonst nur so viel der
        
end;                             //Datei überschreibt wie gebraucht wird.
      //Important because the function overwrite just
      //the part of the file which is needed.
      
mrNo: 
        begin
          
Exit;
        end;
    end;
  end;

  try            //Initialisiert die API
    
AviFileInit;  //Init the API
    
if AviFileOpen(PFile, Inputfile, 0, nil) <> 0 then  //Öffnet eine AVI Datei
    
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;
    //Speichert den AudioStream
    //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;  //'TRUE' zurückgeben wenn alles geklappt hat
  //return 'TRUE' if all right
end;

//Beispiel zu aufrufen der Funktion:
//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('Audiospur erfolgreich gespeichert!'); // Audio sucessfully saved
  
else
    
ShowMessage('Fehler beim Speichern der Audiospur.'); // Error while saving...
end;

 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners