Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.044 c
1-1103014114
Delphi5.01
2004-12-14 11:48
2004.12.26
выезжающее окошко как это сделано в WinAmp-е


6-1097231321
4MO
2004-10-08 14:28
2004.12.26
Proxy


1-1102869888
markers
2004-12-12 19:44
2004.12.26
Выяснение версии Office


1-1102503043
mefisto
2004-12-08 13:50
2004.12.26
Как передать сообщение своей программе с коммандной строки?


3-1101219425
Skywalker
2004-11-23 17:17
2004.12.26
Как выбрать из базы определенной количество записей?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский