Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аvi файл в последовательность *.bmp 
:(
    Опции темы
devmstr
Дата 28.4.2004, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Как преобразовать аvi файл в последовательность *.bmp.
Буду благодарен за любю помощь.


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 3.5.2004, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Неужели никто не знает???


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
p0s0l
Дата 3.5.2004, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Вот немного переделанный пример из FAQ:
Код
uses vfw;

function ExtractFrames(avifn: string; 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;
 fr1, fr2, fr : integer;
 s : string;

begin
 Result := False;
 AVIFileInit;

 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;

 if AVIFileInfo(pFile, @AVIINFO, SizeOf(AVIINFO)) <> AVIERR_OK then
 begin
   AVIFileRelease(pFile);
   AVIFileExit;
   Exit;
 end;

 Error := AVIFileGetStream(pFile, AVIStream, streamtypeVIDEO, 0);
 if Error <> AVIERR_OK then
 begin
   AVIFileRelease(pFile);
   AVIFileExit;
   Exit;
 end;

 gapgf := AVIStreamGetFrameOpen(AVIStream, nil);
 if gapgf = nil then
 begin
   AVIStreamRelease(AVIStream);
   AVIFileRelease(pFile);
   AVIFileExit;
   Exit;
 end;

 fr1 := AVIStreamStart(AVIStream);
 fr2 := AVIStreamEnd(AVIStream);

 for fr := fr1 to fr2 do
 begin
   lpbi := AVIStreamGetFrame(gapgf, fr);
   if lpbi = nil then
   begin
     AVIStreamGetFrameClose(gapgf);
     AVIStreamRelease(AVIStream);
     AVIFileRelease(pFile);
     AVIFileExit;
     Exit;
   end;

   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,
       lpbi^,
       CBM_INIT,
       bits,
       PBITMAPINFO(lpbi)^,
       DIB_RGB_COLORS);
     finally
       DeleteDC(DC_Handle);
     end;

     TmpBmp.Handle := hBmp;
     try
       s := IntToStr(fr);
       while Length(s)<6 do s := '0'+s;
       TmpBmp.SaveToFile(ToFileName + s + '.bmp');
       Result := True;
     except
     end;
   finally
     TmpBmp.Free;
   end;
 end;
 AVIStreamGetFrameClose(gapgf);
 AVIStreamRelease(AVIStream);
 AVIFileRelease(pfile);
 AVIFileExit;
end;

Пример вызова:
Код
ExtractFrames('f:\Video\Satisfaction.avi', 'c:\bmp');


Только не подумай, что прога виснет, вытаскивание 100 фреймов у меня идет около 8 секунд, можешь посчитать сколько у тебя будет это работать, скажем, для 3-минутного ролика (в секунду по 19-24 кадра обычно). Можешь прикрутить какой-нибудь ProgressBar и прогрессировать его в цикле for fr := fr1 to fr2 do - здесь:
fr1 и fr 2 - начальные и конечные номера кадров
fr - текущий кадр

Для компиляции этого примера тебе нужен модуль vfw.pas, вот он (vfw.zip - 35 кб):

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  vfw.zip


--------------------
С уважением, г-н Посол.
PM   Вверх
devmstr
Дата 8.5.2004, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Огромное спасибо. Ты мне очень помог


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Medved
Дата 8.5.2004, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



М
 
Если Вам понравилься ответ, не забывайте о такой возможности как рейтинг. И Вам хорошо, и человека что помог, отблагодарили.
.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
devmstr
Дата 10.5.2004, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Я б с удовольствием, но мне сообщили, что у меня нет даже 100 сообщений, так что я не могу повышать другим рейтинг.


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Medved
Дата 10.5.2004, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Ну так наберите их! wink.gif


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
devmstr
Дата 11.5.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Ну вот мы сейчас с тобой пообщаемся и наберу smile.gif


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.