Главная страница
    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.035 c
4-1100009768
Anonimus
2004-11-09 17:16
2004.12.26
Миниатюра как для файлов Фотошопа


3-1101362282
karat
2004-11-25 08:58
2004.12.26
Кодировка


1-1102497058
TUser
2004-12-08 12:10
2004.12.26
Одна консоль на двоих и много на одного


14-1102258472
GanibalLector
2004-12-05 17:54
2004.12.26
API-монитор


1-1102585765
Sphinx
2004-12-09 12:49
2004.12.26
Формы и процессы в dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский