Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Разделение 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 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
14-1102400353
ocean
2004-12-07 09:19
2004.12.26
У природы нет плохой погоды


6-1097653841
Maxwell
2004-10-13 11:50
2004.12.26
Узнать IP клиентов, подключаемых к idTCPServer


9-1087845784
Darthman
2004-06-21 23:23
2004.12.26
А не устраивать ли нам небольшие конкурсы по кодингу?


14-1102246735
ninja
2004-12-05 14:38
2004.12.26
бесплатный хостинг с ASP


14-1102481329
vidiv
2004-12-08 07:48
2004.12.26
вопрос по математике (система неравенств)