Получение продолжительности AVI файла

Я использую модуль VFW из оболочки JEDI на WinAPI.

Код, который я пишу, предназначен для поиска пользовательских дисков и обнаружения warez (примечание: решение, является ли какой-либо файл легальным или нет, выходит за рамки этого вопроса). Мы делаем MP3, WMA и некоторые графические файлы поиска. Теперь мы хотим обнаружить нелегальные фильмы. Я хочу открыть файл AVI, прочитать некоторые детали из него и закрыть его. У меня есть следующий код:

uses WFV; //from JEDI api wrappers

procedure TForm1.Button1Click(Sender: TObject);
var
  lInfo : TAVIFILEINFOW;
  lFile : IAVIFILE;
  lFileType : string;
  lLenMinutes : integer;
  lFPS : integer;
begin
  {init file}
  AVIFileInit;
  try
    {Open file - note: since we search for warez this is perfely "warezy" file}
    AVIFileOpen(lFile, 'e:\Sideways KLAXXON\Sideways KLAXXON.avi', OF_READ, nil);
    try
      {Get file info} 
      AVIFileInfoW(lFile, lInfo, sizeof(lInfo));
      lFPS:=Round(lInfo.dwRate /lInfo.dwScale);
      lLenMinutes := Round(lInfo.dwLength  / lFPS / 60);
      lFileType := lInfo.szFileType;
      {just for show: prepare some memo to see what we get}
      memo1.Lines.Clear;
      memo1.Lines.Add('File lenght [min]: ' + IntToStr(lLenMinutes));
      memo1.Lines.Add('Width: ' + IntToStr(lInfo.dwWidth));
      memo1.Lines.Add('Height: ' + IntToStr(lInfo.dwHeight));
      memo1.Lines.Add('File type: ' + lFileType);
    finally
      {Closing the file}
      AVIFileRelease (lFile);
      Pointer(lFile) := nil;
    end;
  finally
    {Releasing library}
    AVIFileExit;
  end;
end;

Таким образом, lLenMinutes равен 98, а фильм длится около 121 минуты. Это огромная разница. Что я делаю неправильно? dwRate равен 1 миллиону, а dwScale равен 40 КБ, поэтому FPS идеально равен 25. dwLength равно 147 КБ.MSDN говорит: «Единицы определяются dwRate и dwScale ».

Примечание: этопродолжение этого вопроса, но так как проблема сбоев была решена, я закрыл другой вопрос и переместил сюда улучшенный контент.

Ответы на вопрос(1)

Ваш ответ на вопрос