Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как экстрагировать аудиодорожку из AVI файла

Автор: http://www.swissdelphicenter.ch

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;
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay