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