Delphi - áàçà çíàíèé

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


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




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

Âçÿòî ñ ñàéòà



Ñîäåðæàíèå ðàçäåëà