Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

-= .AVI видео и информация о нем =- [D5, D6, D7, Win95/98, WinME, Win2k]


_DemiK ©   (2005-01-16 03:59:00) 

В видео файлах есть что-то типо тегов где имеется инфа о артисте и т.д. Как их от туда всех извлечь, как, к примеру, теги из МР3?
Спасибо!


NailMan   (2005-07-25 11:34:00) [1]

описания типов и констант:

type
        FCC_Type = array[0..3] of char;
Const

        FCC_RIFF : FCC_Type = 'RIFF';
        FCC_hdrl : FCC_Type = 'hdrl';
        FCC_AVI  : FCC_Type = 'AVI ';
        FCC_avih : FCC_Type = 'avih';
        FCC_strl : FCC_Type = 'strl';
        FCC_strh : FCC_Type = 'strh';
        FCC_strf : FCC_Type = 'strf';
        FCC_strd : FCC_Type = 'strd';
        FCC_strn : FCC_Type = 'strn';
        FCC_MOVI : FCC_Type = 'movi';
        FCC_LIST : FCC_Type = 'LIST';
        FCC_JUNK : FCC_Type = 'JUNK';
        FCC_indx : FCC_Type = 'indx';
        FCC_vids : FCC_Type = 'vids';
        FCC_MPEG : FCC_Type = chr($0)+ chr($0) + chr($01)+ chr($BA);

TYPE
           TFOURCC = array[0..3] of char;    

           TVidsFormat = record
                 BMfmt : TBITMAPINFOHEADER;
                 DVFmt : TDVINFO;
           end;

          TVideoStream = record
                    st : TAVIStreamHeader;
                   FMT : TVidsFormat;
          end;

          TAudioStream = record
                    st : TAVIStreamHeader;
                WAVFmt : TWaveFormatEx;
          end;

                    TAviInfo = record
                   AVIHeader : TAVIMainHeader;
                  audstreams : DWORD;
                        vids : TvideoStream;
                        auds : Array[0..4] of TAudioStream;
                         CRC : Int64;
                    end;

Function ConvertFCCToDWORD(fcc:FCC_Type):dword;
begin
move(fcc,result,4);
end;



---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


NailMan   (2005-07-25 11:32:00) [2]

[8] NailMan ©   (25.07.05 11:26)

нашел в закромах родины своего плеера. Вырезано из контекста, комментарии излишни. Часто встречаются лишние операции move(PD^,FCC,4);- это для отладки - видно где я стою в файле если заголовок нестандартный(помогает написать распознавание левой секции и ее обработать в дальнейшем).

Function ReadAVIHeader(Const FName:String;Var Avi:TAviInfo):Cardinal;
var f:Integer;
    p,PD:pointer;
    NulDD,i,leng:Cardinal;
audstreams:dword;
    FCC,FCC2 : Array[0..3] of char;
    MH : ^TAVIMainHeader;
    SH : ^TAVIStreamHeader;
   VFH : ^TVidsFormat;
   WVH : ^TWaveFormatEx;

begin
Result:=1; //По умолчанию - AVIVideo
Zeromemory(@AVi,sizeof(TAviInfo));

if FileAutoDetection then avi.CRC:=getfilecrc(fname);

F:=Fileopen(fname,fmopenread or fmsharedenynone);

 fileread(f,fcc,4);   //RIFF
 fileread(f,nuldd,4);
 fileread(f,fcc2,4);  //AVI_

 if (fcc=fcc_riff) and (fcc2<>FCC_AVI) then
  begin
    result:=0;
   Fileclose(F);
   exit;
  end;

 if (fcc<>fcc_riff) then
   begin
    If FCC=FCC_mpeg then result:=2
     else
     result:=0;
    Fileclose(F);
    exit;
   end;

 Fileread(f,fcc,4);  //LIST
 fileread(f,nuldd,4);
  getmem(p,nuldd+1024);
   fileread(f,p^,nuldd);
 fileclose(f);

 PD:=P; //stay on 'hdrl'
 inc(DWORD(PD),4); //stay on 'avih'
  MH:=PD;
  AVi.AVIHeader.dwMicroSecPerFrame:=MH^.dwMicroSecPerFrame;
  avi.AVIHeader.dwMaxBytesPerSec:=mh^.dwMaxBytesPerSec;
  avi.AVIHeader.dwFlags:=mh^.dwFlags;
  avi.AVIHeader.dwTotalFrames:=mh^.dwTotalFrames;
  avi.AVIHeader.dwStreams:=mh^.dwStreams;
 inc(DWORD(PD),sizeof(TAVIMainHeader)); //Stay on LIST
 audstreams:=0;
    move(PD^,FCC,4);
 For i:=0 to avi.AVIHeader.dwStreams-1 do
  Begin
   inc(DWORD(PD),4); //stay on 'strl' length
    move(PD^,FCC,4);
   inc(DWORD(PD),4); //Stay on 'strl'
    move(PD^,FCC,4);
   inc(DWORD(PD),4); //stay on 'strh'
    move(PD^,FCC,4);
   SH:=PD;
   if SH^.fccType=ConvertFCCToDWORD(FCC_vids) then
    begin
     avi.vids.st:=sh^;
     inc(DWORD(PD),sh^.cb+8); //stay on 'strf'
      move(PD^,FCC,4);
     inc(DWORD(PD),4); //stay on length 'strf'
      move(PD^,leng,4);
     inc(DWORD(PD),4); //stay on 'strf' data
     VFH:=PD;
     avi.vids.FMT.BMfmt:=VFH^.BMfmt;
     if leng>56 then
       avi.vids.FMT.DVFmt:=VFH^.DVFmt;
     inc(DWORD(PD),leng);//stay on LIST
     move(PD^,FCC,4);
    end;

    if SH^.fccType=ConvertFCCToDWORD('auds') then begin
     avi.auds[audstreams].st:=SH^;
      inc(DWORD(PD),sh^.cb+8); //stay on 'strf'
      move(PD^,FCC,4);
     inc(DWORD(PD),4); //stay on length 'strf'
      move(PD^,leng,4);
     inc(DWORD(PD),4); //stay on 'strf' data
     WVH:=PD;
     avi.auds[audstreams].WAVFmt:=WVH^;
     inc(DWORD(PD),leng);
     inc(audstreams);
    end;
  Move(PD^,FCC,4);//Stay on JUNK or 'strn'
  If (FCC=FCC_JUNK) or (FCC=FCC_strn) or (FCC=FCC_strd) or (FCC=FCC_indx) then
   begin
     inc(DWORD(PD),4);
      move(PD^,nuldd,4);
      If nuldd mod 2<>0 then inc(nuldd);
      inc(DWORD(PD),4+NULDD);
      move(PD^,FCC,4);
   end;
  End;
 avi.audstreams:=audstreams;
freemem(p);
end;


---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


NailMan   (2005-07-25 11:26:00) [3]

извлечь тех-информацию можно распотрошив заголовок AVI, а сделать это грамотно можно с помощью DirectX SDK, там все подробнейше расписано впро все стандартныесекции заголовков RIFF - медиафайлов(AVI, WAV etc)

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


Simon   (2005-07-23 12:27:00) [4]

А может кто знает как проделать тоже самое но с VOB или IFO файлами?
Очень бы хотелось почитать...
Заранее благодарен.


Киби   (2005-07-19 17:15:00) [5]

http://abcavi.kibi.ru/docs/avi_bitrate.htm- там как раз про вычисление характеристик AVI файла написано.

К вопросу о всяко-разных способах изменения информации в AVI тэгах всё-таки лучше зайти непосредственно на страницу для разработчиков:   http://abcavi.kibi.ru/developer.htm

Там и примеры есть с исходными кодами, и DLL для работы с AVI файлами, и технические описания.


Black&White   (2005-07-11 12:47:00) [6]

Вот здесь есть то о чем ты спрашиваешь!
http://abcavi.kibi.ru/index_rus.htm
Называется  поддержка расширенного набора INFO тэгов (Extended INFO tags)


есть только "технические" характеристики.


Встречное предложение
помогите, пожалуйста, извлечь техническую информацию из заголовка  AVI файл


cydvb   (2005-04-14 11:50:00) [7]

инфа об артисте есть, во всяком случае когда в адоп премьере делаеш аувишку можеш запихивать свою инфу, и винда её с удовольствием показывает в свойствах.


Antonn   (2005-01-16 15:14:00) [8]

_DemiK   (16.01.05 15:04) [2]
За базаром... Сначала научись нормально вопрос ставить. Вот как найдешь информацию об артисте в *.avi тогда и ори.


_DemiK   (2005-01-16 15:04:00) [9]

Удалено модератором
Примечание: Предупреждение тебе.


Antonn   (2005-01-16 05:12:00) [10]


> инфа о артисте

разве такие есть? есть только "технические" характеристики.


Наверх

Титульная страница Поиск, карта сайта Написать письмо