Długiść filmu (bez MediaPlayer)

0

Jak moge sprawdzić długośc pliku audio/video (GGSS) bez używania komponentu MediaPlayer??

0

Sciagasz opis pliku AVI, szukasz jak wyglada header:

typedef struct {
    DWORD  dwMicroSecPerFrame;
    DWORD  dwMaxBytesPerSec;
    DWORD  dwReserved1;
    DWORD  dwFlags;
    DWORD  dwTotalFrames;
    DWORD  dwInitialFrames;
    DWORD  dwStreams;
    DWORD  dwSuggestedBufferSize;
    DWORD  dwWidth;
    DWORD  dwHeight;
    DWORD  dwScale;
    DWORD  dwRate;
    DWORD  dwStart;
    DWORD  dwLength;
} MainAVIHeader;

piszesz odpowiednia procedura, ktora go odczyta

procedure TForm1.Button1Click(Sender: TObject);
type
  TMainAviHeader = packed(?) record
    dwMicroSecPerFrame: LongWord;
    dwMaxBytesPerSec: LongWord;
    dwReserved1: LongWord;
    dwFlags: LongWord;
    dwTotalFrames: LongWord;
    dwInitialFrames: LongWord;
    dwStreams: LongWord;
    dwSuggestedBufferSize: LongWord;
    dwWidth: LongWord;
    dwHeight: LongWord;
    dwScale: LongWord;
    dwRate: LongWord;
    dwStart: LongWord;
    dwLength: LongWord;
  end;
var
  AviFile: file;
  Header: TMainAviHeader;
begin
  AssignFile(AviFile, 'film.avi');
  Reset(AviFile);
  BlockRead(AviFile, Header, SizeOf(Header));
  CloseFile(AviFile);
end;

i w rekordzie Header masz zapisane informacje o filmie

0

tu tez masz odczytywanie.
czas masz w "ostringtime"

var
             oFps:longint;
             oTime:TDatetime;
             oWidth:integer;
             oHeight:integer;
             oTotalFrames:integer;
             oHandler1:FourCC;
             oHandler2:FourCC;
             oFilesize:longword;
             oCodec:string;
             oStringTime:string;
             oerror:integer;

function Execute(filename:string):integer;
var
  AVI : TAVIMainHeader ;
  DVINFO : TDVINFO ;
  unknownR:TaviUnknownrecord;
  avi2:TsecondAvi;
  F : File;
  t:integer;
  g,m,s:string;
begin
  ofps:=0;
  otime:=0;
  oWidth:=0;
  oHeight:=0;
  oTotalFrames:=0;
  oHandler1:='    ';
  oHandler2:='    ';  
  oFilesize:=0;
  ocodec:='Unknown';
  if not fileexists(FileName)then
  begin
    oerror:=1;
    Execute:=1;
    exit;
  end;
  AssignFile(F, FileName);
  filemode:=0;
  Reset(F,1);
  BlockRead(F, DVINFO, SizeOf(DVINFO));
  if uppercase(DVINFO.dwDVAAuxSrc)<>'RIFF'then
  begin
    oerror:=2;
    Execute:=2;
    exit;
  end;

  if uppercase(DVINFO.dwDVAAuxSrc1)<>'AVI 'then
  begin
    oError:=2;
    Execute:=2;
    exit;
  end;
  BlockRead(F, AVI, SizeOf(AVI));
  Blockread(f, UnknownR, Sizeof(unknownR));
  Blockread(F, avi2, sizeof(avi2));
  oFileSize:=system.filesize(f);
  Blockread(f, UnknownR, Sizeof(unknownR));
  Blockread(f, UnknownR, Sizeof(unknownR));  

  owidth:=avi.Width;
  oheight:=avi.Height;
  oTotalFrames:=avi2.Length;
  ofps:=avi2.Rate div avi2.Scale;
  t:=round(avi2.Length div(avi2.Rate div avi2.Scale));
  g:=inttostr(t div 3600);
  m:=inttostr((t-(strtoint(g)*3600)) div 60);
  s:=inttostr(t mod 60);
  if length(g)=1 then g:='0'+g;
  if length(m)=1 then m:='0'+m;
  if length(s)=1 then s:='0'+s;
  oStringTime:=g+':'+m+':'+s;
  oTime:=strtotime(ostringtime);
  ohandler1:=avi2.Handler;
  ohandler2:=Unknownr.f4;
  oCodec:=getCodec(ohandler2);
  CloseFile(F);
end;
0

No tak fajne rzeczy tylko ze do działa jedynie do filmów a co z muzyka?

0

Tak samo http://myfileformats.com/ i do roboty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1