Recuperer la resolutions (width & height) dans un fichiers avi

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 238 fois - Téléchargée 30 fois

Contenu du snippet

Bonjour!

Voila certainement un petit truc qui vous plairas, une fonction simple qui permet de recuperer les dimensions d'une video Avi (RIFF).
La fonction est rapide d'execution et fonctionne pleinement (dans le cas seul ou un fichier avi type Riff est lus).

passont au code.

Source / Exemple :


{
pour commencer créons un type TAviRes qui comporterat 2 integer
}

type
  TAviRes = record
    width,
    height : integer;
  end;

{
Ensuite notre fonction qui vas bien.
Fonction GetAviResolution avec un retour de type TAviRes
}

function GetAviResolution(filename : string) : TAviRes;
   { 
   AAAH! ma chere fonction SHL8 qui permet convertir une addition d'octets en entier 16bits 
   ici SHL8() est integrée a GetAviResolution(), mais rien ne vous empeche de l'extraire d'ici.
   }
   function Shl8(int : integer) : integer;
   begin
     { simple comme bonjour! on decale de 8 vers la droite (voir SHL et SHR dans l'aide delphi) }
     result := int shl 8;
   end;

{ declaration des variables }
var
  FOB : file of byte; { on lit des octets, pas des caracteres donc ... file of byte }
  Oct1,Oct2 : byte; { j'aurais pus faire un tableau array[1..2] of byte mais ... } 
begin
  try
    { on assigne FileName a FOB }
    AssignFile(FOB,FileName);
    { on ouvre le fichier }
    Reset(FOB);
    { on positionne la lecture a l'offset $40 (hexa) soit l'octet 64 (decimal) }
    seek(FOB,$40);
      { on lit les deux octets qui stock la largeur de la video }
      read(FOB, Oct1, Oct2);
      { on convertis puis on renvois la largeur dans width }
      Result.Width := shl8(Oct1+Oct2);
    { on positionne la lecture a l'offset $44 (hexa) soit l'octet 68 (decimal) }
    seek(FOB,$44);
      { on lit les deux octets qui stock la hauteur de la video }
      read(FOB, Oct1, Oct2);
      { on convertis puis on renvois la hauteur dans height }
      Result.Height := shl8(Oct1+Oct2);
  finally
    { que ça ce passe bien ou pas on ferme le fichier } 
    CloseFile(FOB);
  end;
end;

{
Exemple d'utilisation de GetAviResolution()
}

procedure TForm1.Button1Click(Sender : TObject);
{ on crée une variable de type TAviRes pour eviter les apels inutile a GetAviResolution }
var CurrentAviFile : TAviRes;
begin
  { on ouvre le fichier }
  if opendialog1.Execute then begin
     { on recupere la resolution de la video }
     CurrentAvifile := GetAviResolution(OpenDialog1.FileName);
     { on affiche la resolution dans un simple TLabel avec Format() }
     Label1.Caption := format('%d x %d', [CurrentAviFile.Width, CurrentAviFile.Height]);
  end;
end;

Conclusion :


pour l'instant je n'ai pas inclus la verification de signature du fichier AVI ...
donc la fonction peut renvoyer n'importe quoi (0,0 ou pire) si le fichier n'est pas un AVI type RIFF (divx, xvid ect...)
j'essayerais d'ameliorer le tout au fur et a mesure.

(pas de source dispo, inutile pour quelques lignes de codes)

A voir également

Ajouter un commentaire Commentaires
Messages postés
128
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
14 juillet 2008

certaines choses oui mais le reste c'est le broulliard
Messages postés
3
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
31 mai 2006

plus simple et fonctionne :

mettre un composant Tmediaplayer sur la fiche.

Tmediaplayer1.visible:=false;

dans l'evenement onclick ou autre :

if OpenDialog1.Execute then
begin mediaplayer1.filename:=OpenDialog1.Filename;
mediaplayer1.Open; hauteur_video:=mediaplayer1.DisplayRect.Bottom-mediaplayer1.DisplayRect.top;
largeur_video:=mediaplayer1.DisplayRect.right-
mediaplayer1.DisplayRect.left;
mediaplayer1.close;
end;

hauteur_video et largeur_video étant bien entendu deux entiers
Messages postés
3
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
31 mai 2006

fonctionne pas :
erreur ES/32

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.