Форум: "Media";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизРазделение AVI файла Найти похожие ветки
← →
Antonmm2 (2004-09-24 20:46) [0]Как разделить AVI файл на отдельные кадры, и потом сохранить каждый кадр под отдельным файлом bmp или jpg?
← →
Defunct © (2004-09-24 20:47) [1]Abobe Premier
← →
Antonmm2 (2004-09-24 20:53) [2]С помощью своей программы
← →
PGM_X (2004-09-25 23:11) [3]Video For Windows:
Инициализация:
AVIFileOpen
AVIFileGetStream
AVIStreamGetFrameOpen
В цикле AVIStreamGetFrame и сохраняй полученные кадры
И не забудь
AVIStreamRelease
AVIFileRelease
← →
miek (2004-09-25 23:23) [4]Есть еще плагин для FAR-а. Но работает он на больших файлах ужасно медленно.
← →
NailMan © (2004-09-27 15:53) [5]DirectShow + фильтр ISampleGrabber внедряемый в граф.
ЗЫ: Это что касается программного исполнения. Подробности смотри в DX SDK, там и примеры есть.
---
WBR, NailMan aka 2:5020/3337.13
← →
ZDimitriy (2004-09-29 09:48) [6]используй это:
uses
VfW { from download };
function GrabAVIFrame(avifn: string; iFrameNumber: Integer; ToFileName:
TFileName): Boolean;
var
Error: Integer;
pFile: PAVIFile;
AVIStream: PAVIStream;
gapgf: PGETFRAME;
lpbi: PBITMAPINFOHEADER;
bits: PChar;
hBmp: HBITMAP;
AviInfo: TAVIFILEINFOW;
sError: string;
TmpBmp: TBitmap;
DC_Handle: HDC;
begin
Result := False;
// Initialize the AVIFile library.
AVIFileInit;
// The AVIFileOpen function opens an AVI file
Error := AVIFileOpen(pFile, PChar(avifn), 0, nil);
if Error <> 0 then
begin
AVIFileExit;
case Error of
AVIERR_BADFORMAT: sError := "The file couldnot be read";
AVIERR_MEMORY: sError :=
"The file could not be opened because of insufficient memory.";
AVIERR_FILEREAD: sError :=
"A disk error occurred while reading the file.";
AVIERR_FILEOPEN: sError :=
"A disk error occurred while opening the file.";
end;
ShowMessage(sError);
Exit;
end;
// AVIFileInfo obtains information about an AVI file
if AVIFileInfo(pFile, @AVIINFO, SizeOf(AVIINFO)) <> AVIERR_OK then
begin
// Clean up and exit
AVIFileRelease(pFile);
AVIFileExit;
Exit;
end;
// Show some information about the AVI
Form1.Memo1.Lines.Add("AVI Width : " + IntToStr(AVIINFO.dwWidth));
Form1.Memo1.Lines.Add("AVI Height : " + IntToStr(AVIINFO.dwHeight));
Form1.Memo1.Lines.Add("AVI Length : " + IntToStr(AVIINFO.dwLength));
// Open a Stream from the file
Error := AVIFileGetStream(pFile, AVIStream, streamtypeVIDEO, 0);
if Error <> AVIERR_OK then
begin
// Clean up and exit
AVIFileRelease(pFile);
AVIFileExit;
Exit;
end;
// Prepares to decompress video frames
gapgf := AVIStreamGetFrameOpen(AVIStream, nil);
if gapgf = nil then
begin
AVIStreamRelease(AVIStream);
AVIFileRelease(pFile);
AVIFileExit;
Exit;
end;
// Read current Frame
// AVIStreamGetFrame Returns the address of a decompressed video frame
lpbi := AVIStreamGetFrame(gapgf, iFrameNumber);
if lpbi = nil then
begin
AVIStreamGetFrameClose(gapgf);
AVIStreamRelease(AVIStream);
AVIFileRelease(pFile);
AVIFileExit;
Exit;
end;
// Show number of frames:
Form1.Memo1.Lines.Add(Format("Framstart: %d FrameEnd: %d",
[AVIStreamStart(AVIStream), AVIStreamEnd(AVIStream)]));
TmpBmp := TBitmap.Create;
try
TmpBmp.Height := lpbi.biHeight;
TmpBmp.Width := lpbi.biWidth;
bits := Pointer(Integer(lpbi) + SizeOf(TBITMAPINFOHEADER));
DC_Handle := CreateDC("Display", nil, nil, nil);
try
hBmp := CreateDIBitmap(DC_Handle, // handle of device context
lpbi^, // address of bitmap size and format data
CBM_INIT, // initialization flag
bits, // address of initialization data
PBITMAPINFO(lpbi)^, // address of bitmap color-format data
DIB_RGB_COLORS); // color-data usage
finally
DeleteDC(DC_Handle);
end;
TmpBmp.Handle := hBmp;
AVIStreamGetFrameClose(gapgf);
AVIStreamRelease(AVIStream);
AVIFileRelease(pfile);
AVIFileExit;
try
TmpBmp.SaveToFile(ToFileName);
Result := True;
except
end;
finally
TmpBmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Extract Frame 3 from AVI file
GrabAVIFrame("C:\Test.avi", 3, "c:\avifram.bmp");
end;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c