Главная страница
    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.46 MB
Время: 0.039 c
14-1089680200
olhovik
2004-07-13 04:56
2004.08.01
InstallShield Express


1-1090083860
diablo_m
2004-07-17 21:04
2004.08.01
Динамическое создание формы


14-1089641103
VID
2004-07-12 18:05
2004.08.01
Вопросы по администрированию доступа к файлам и папкам


9-1082455854
WondeRu
2004-04-20 14:10
2004.08.01
OpenGL Extensions


3-1089098825
Iddqd
2004-07-06 11:27
2004.08.01
Дни недели





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