Как экстрагировать аудиодорожку из 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