AVI :-[

0

Na wstępie chciałbym zaznaczyć iż przeszukałem CAŁE forum delphi (nie tylko z tej strony) i nie znalazłem odpowiedzi więc proszę nie wyjeżdżać z tekstami "to już tyle razy omawiano" :-[ . Owszem znalazłem sporo postów dotyczących tematu ale żadnej konkretnej odpowiedzi, a wszyscy tylko karcili autorów za "banalne" :-[ posty np.

http://www.4programmers.net/forum/viewtopic.php?id=38728
http://www.4programmers.net/forum/viewtopic.php?id=32410
http://www.4programmers.net/forum/viewtopic.php?id=32802
http://www.4programmers.net/forum/viewtopic.php?id=35697
http://www.4programmers.net/forum/viewtopic.php?id=38035
http://www.4programmers.net/forum/viewtopic.php?id=38225

A teraz do rzeczy. Jak pobrać paramety avi'ka tzn

  • wysokość
  • szerokość,
  • ilość klatek na sekundę
  • czas trwania (znalazłem jednego posta ale nie wiem czy coś pomoże)

Jeśli ktoś wie jak to zrobić, lub zna jakieś strony/komponenty/unit'y itp które mogłyby pomóc w tej sprawie niech umieści to w FAQ bo sporo ludzi o to pyta, a nikt nie potrafi w konkretny sposób odpowiedzieć.

0

Nie wiem czy rozwiązanie, które przedstawiam jest dobre.
Jak ktoś zna lepszy sposób to niech go poda :)
Procedura może służyć do pobrania kilku informacji o pliku AVI:

procedure GetAviInfo(FName: String);
type
TDVINFO = record
dwDVAAuxSrc : LongInt;
dwDVAAuxCtl : LongInt;
dwDVAAuxSrc1 : LongInt;
dwDVAAuxCtl1 : LongInt;
dwDVVAuxSrc : LongInt;
dwDVVAuxCtl : LongInt;
dwDVReserved1 : LongInt;
dwDVReserved2 : LongInt;
end;
TAVIMainHeader = record
dwMicroSecPerFrame : LongInt;
dwMaxBytesPerSec : LongInt;
dwPaddingGranularity : LongInt;
dwFlags : LongInt;
dwTotalFrames : LongInt;
dwInitialFrames : LongInt;
dwStreams : LongInt;
dwSuggestedBufferSize : LongInt;
dwWidth : LongInt;
dwHeight : LongInt;
dwScale : LongInt;
dwRate : LongInt;
dwStart : LongInt;
dwLength : LongInt;
end;
var
AVIMainHeader : TAVIMainHeader ;
DVINFO : TDVINFO ;
F : File;
begin
AssignFile(F, FName);
Reset(F,1);
BlockRead(F, DVINFO, SizeOf(DVINFO));
BlockRead(F, AVIMainHeader, SizeOf(AVIMainHeader));
CloseFile(F);
{ tutaj dalsza obrobka pobranych informacji :) np: }
ShowMessage('Szerokość: ' + IntToStr(AVIMainHeader.dwWidth) +
^J'Wysokość: ' + IntToStr(AVIMainHeader.dwHeight) );
end;

Jako parametr należy podać nazwę pliku wraz z pełną ścieżką, np.:
GetAviInfo('c:\windows\pulpit\untitled.avi');

Więcej na temat struktur DVInfo i AVIMainHeader znajdziesz zaglądając tutaj:
http://msdn.microsoft.com/library/en-us/directx9_c/directx/htm/avifileformat.asp
http://msdn.microsoft.com/library/en-us/directx9_c/directx/htm/dvinfostructure.asp
http://msdn.microsoft.com/library/en-us/directx9_c/directx/htm/avimainheaderstructure.asp

PS. Jeżeli popełniłem jakieś błędy to proszę o poprawienie mnie :)

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