web-dev-qa-db-fra.com

comment puis-je trouver la date à laquelle une vidéo (.AVI .MP4) a été enregistrée?

propriétés> Date de création ... Je pensais que cela voulait dire la date à laquelle la vidéo avait été créée, mais j'ai finalement réalisé que la date change à chaque fois que je me déplace, que je réorganise, voire ouvre un fichier. souvent, la date de modification est antérieure à la date de création. la date à laquelle un fichier jpeg a été pris est facilement disponible. Est-il possible d'obtenir les mêmes informations à partir d'un fichier AVI ou MP4? Merci pour toutes les informations que vous pouvez donner.

19
user374552

Il ne semble pas y avoir de norme bien définie pour les métadonnées vidéo (par rapport aux photos et aux fichiers audio, qui ont respectivement EXIF ​​et ID3/etc.)

Certaines balises existent comme par exemple. Titre, Compositeur, etc. Vous pouvez les voir si vous sélectionnez un fichier de film dans Windows 7 (peut-être aussi des versions antérieures), dans l'Explorateur ou si vous cliquez avec le bouton droit et affichez les propriétés. Je n'ai malheureusement pas trouvé de mot-clé pour la date d'enregistrement - la chose la plus proche disponible est Year (entier) :-(

Par programme, vous pouvez lire et écrire la plupart de ces balises dans .NET en utilisant Taglib Sharp à partir du projet mono. Les sources et les fichiers binaires sont disponibles sur le serveur FTP banshee . Il a une liste assez impressionnante de formats pris en charge (mais néanmoins, assurez-vous de saisir les exceptions lorsque vous essayez de lire ou d'écrire des balises - il jettera chaque fois qu'il trouve un fichier qu'il ne comprend pas, ce qui m'est arrivé plusieurs fois pour ma modeste collection des enregistrements à domicile.)

Pour lire les tags:

using (var f = TagLib.File.Create(@"c:\Path\To\MyVideo.mp4"))
{
    if (f.Tag != null)
    {
        string title = f.Tag.Title;
        Size resolution = new Size(f.Properties.VideoWidth, f.Properties.VideoHeight);
        int year = f.Tag.Year;
        // etc.
    }
}

Et de même, pour écrire les métadonnées dans le fichier:

using (var f = TagLib.File.Create(@"c:\Path\To\MyVideo.mp4"))
{
    f.Tag.Title = "My Awesome Movie";
    f.Tag.Year = (uint)2011;
    f.Save();
}
6
Isak Savo

Essayez exiftools ou mediainfo, qui vous fournit une fonction d’exportation sous forme de texte. Faites juste attention à l'heure d'été.

1
skyrail

Pour moi, l'heure de modification (mtime) est également antérieure à la date de création dans de nombreux cas (la plupart), car, comme vous le dites, toute réorganisation modifie l'heure de création. Cependant, AFAIUI mtime reflète avec précision le moment où le contenu du fichier a réellement été modifié. Il doit donc s'agir d'un enregistrement précis de la date de capture vidéo.

Après avoir découvert cet échec de métadonnées pour les fichiers de film, je vais renommer mes vidéos en fonction de leur temps réel, ce qui me permet de le stocker de manière plus robuste!

0
darrenp

Le meilleur moyen que j'ai trouvé d'obtenir la date "dateTaken" pour une vidéo ou des images est d'utiliser:

 Imports Microsoft.WindowsAPICodePack.Shell
 Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem
 Imports System.IO
 Dim picture As ShellObject = ShellObject.FromParsingName(path)
 Dim picture As ShellObject = ShellObject.FromParsingName(path)
 Dim ItemDate=picture.Properties.System.ItemDate

Le code ci-dessus nécessite l’API Shell, qui est interne à Microsoft, et ne dépend d’aucune autre DLL externe.

0
rogsonl

L'existence de cette métadonnée dépend entièrement de l'application qui a écrit le fichier. Il est très courant de charger des fichiers JPG avec des métadonnées (balises EXIF) sur le fichier, telles qu'un horodatage, des informations sur l'appareil photo ou une géolocalisation. Les tags ID3 dans les fichiers MP3 sont également très courants. Mais il est beaucoup moins courant de voir ce type de métadonnées dans les fichiers vidéo.

Si vous avez simplement besoin d'un outil pour lire ces données à partir de fichiers manuellement, GSpot peut faire l'affaire: http://www.videohelp.com/tools/Gspot

Si vous voulez lire ceci dans le code, j'imagine que chaque format de conteneur va avoir ses propres normes et que chacun prendra un peu de recherche et de mise en œuvre à supporter.

0
David