Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как экстрагировать аудиодорожку из AVI файла?

01.01.2007
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;

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php

Как экстрагировать аудиодорожку из AVI файла?