Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
3-1089106134
serg!
2004-07-06 13:28
2004.08.01
Apollo SQL 5.0-5.2


1-1089866783
sapsi
2004-07-15 08:46
2004.08.01
Ошибка Excel при вызове из Делфи


14-1090160087
4ainik
2004-07-18 18:14
2004.08.01
dcu


14-1089429928
Думкин
2004-07-10 07:25
2004.08.01
С днем рождения! 10 июля.


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