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

Вниз

кодеки   Найти похожие ветки 

 
Senator   (2004-05-14 16:03) [0]

Кто подскажет, как узнать какими кодеками (видео, аудио) был сжат avi файл ??


 
NailMan ©   (2004-05-14 16:18) [1]

Получаешь FCC видеопотока(проще всего вытащить его напрямую из заголовка ручками) и юзаешь такую функцию:

Function GetVideoCodec(FCC:DWORD):String;
label _exit;
var pSysDevEnum : ICreateDevEnum;
      pEnumCat : IEnumMoniker;
      pMoniker : IMoniker;
      pPropBag : IPropertyBag;
      cFetched : DWORD;
        FCCStr : String;
        OLEvar : OLEVariant;
             n : string;
           FCCH: TFOURCC;
begin
result:="Незарегистированный кодек";
move(FCC,FCCH,4);
FCCStr:=string(FCCH);
pSysDevEnum:=nil;
pEnumCat:=nil;
pPropBag:=nil;
pMoniker:=nil;

CoCreateInstance(CLSID_SystemDeviceEnum, nil, CLSCTX_INPROC, IID_ICreateDevEnum,
   pSysDevEnum);
if not assigned(pSysDevEnum) then exit;
pSysDevEnum.CreateClassEnumerator(CLSID_VideoCompressorCategory, pEnumCat, 0);

while pEnumCat.Next(1, pMoniker, @cFetched) = S_OK do
begin
   pMoniker.BindToStorage(nil, nil, IID_IPropertyBag, pPropBag);
   pPropBag.Read("FccHandler", OLEVar, nil);
   N:=VarToStr(OLEVar);
    If uppercase(n)=uppercase(FCCstr) then
     begin
      pPropBag.Read("FriendlyName", OLEvar, nil);
      result:=VarToStr(OLEVar);
      goto _exit;
     end;
   OLEVar:="";
   pPropBag:=nil;
   pMoniker:=nil;
end;
_exit:
   pPropBag:=nil;
   pMoniker:=nil;
   pEnumCat:=nil;
   pSysDevEnum:=nil;
end;


Точно также получаешь индентификатор кодека из заголовка AVI(ручками, ручками) и юзаешь эту функцию:

Function GetAudioCodec(AcmId:DWORD):String;
label _exit;
var pSysDevEnum : ICreateDevEnum;
      pEnumCat : IEnumMoniker;
      pMoniker : IMoniker;
      pPropBag : IPropertyBag;
      cFetched : DWORD;
        OLEvar,
       olevar2 : OLEVariant;
            VM : TVariantManager;
            NN : DWORD;
begin
result:="Неизвестный кодек";

pSysDevEnum:=nil;
pEnumCat:=nil;
pPropBag:=nil;
pMoniker:=nil;
GetVariantManager(VM);

CoCreateInstance(CLSID_SystemDeviceEnum, nil, CLSCTX_INPROC, IID_ICreateDevEnum,
   pSysDevEnum);
if not assigned(pSysDevEnum) then exit;
pSysDevEnum.CreateClassEnumerator(CLSID_AudioCompressorCategory, pEnumCat, 0);

while pEnumCat.Next(1, pMoniker, @cFetched) = S_OK do
begin
   pMoniker.BindToStorage(nil, nil, IID_IPropertyBag, pPropBag);
   pPropBag.Read("AcmId", OLEVar, nil);

   if VarIsType(OLEVar,[varLongWord,varInteger]) then
    Begin
    NN:=VM.VarToInt(OLEVar);
    If AcmId = NN then
     begin
      pPropBag.Read("FriendlyName", OLEvar2, nil);
      result:=VarToStr(OLEVar2);
      goto _exit;
     end;
    End;
   pPropBag:=nil;
   pMoniker:=nil;
end;
_exit:
   pPropBag:=nil;
   pMoniker:=nil;
   pEnumCat:=nil;
   pSysDevEnum:=nil;
end;


---
WBR, NailMan aka 2:5020/3337.13


 
NailMan ©   (2004-05-14 16:26) [2]

Формат AVI(RIFF) лучше всего описан в SDK("AVI RIFF File Reference").

Вот выдержка(*.DOC) из этой части - разбирайся что к чему.
http://www.cyborghome.ru/nailman/zakroma/AVI_RIFF_Format.doc

В модуле MMSystem.Pas все структуры заголовков AVI есть.

---
WBR, NailMan aka 2:5020/3337.13


 
Senator   (2004-05-14 16:46) [3]

ок, пасибо, ща почитаю



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.067 c
14-1089291333
DimKa
2004-07-08 16:55
2004.08.01
В какое время вы чаще бываете на данном сайте?


1-1089955222
BillyJeans
2004-07-16 09:20
2004.08.01
Рамка вокруг TEdit....


1-1090398084
Loeron
2004-07-21 12:21
2004.08.01
TDriverComboBox & TDirectoryListBox


4-1087899963
init13
2004-06-22 14:26
2004.08.01
температура процессора, и др. термодатчиков


14-1089302163
OSokin
2004-07-08 19:56
2004.08.01
Мастера Дельфи