Comment puis-je trouver la date une vidéo (.AVI.MP4) a été effectivement enregistrée?
propriétés> date de création... je pensais que cela signifiait la date à laquelle la vidéo a été créée, mais finalement réalisé que la date change chaque fois que je bouge, réorganise, même ouvrir un fichier. souvent, la date de modification est antérieure à la date de création. la date à laquelle un jpeg a été pris est facilement disponible. y a-t-il un moyen d'obtenir les mêmes informations à partir d'un fichier AVI ou MP4? je vous remercie pour toutes les informations que vous pouvez donner.
5 réponses
il ne semble pas y avoir de norme bien définie pour les métadonnées vidéo (par rapport aux photos et fichiers audio, qui ont EXIF et ID3/etc. respectivement)
certaines étiquettes existent comme le titre, le compositeur, etc. Vous pouvez les voir si vous sélectionnez un fichier de film dans L'Explorateur Windows 7 (peut-être des versions plus anciennes aussi) ou le clic droit et les propriétés de vue. Je n'ai pas trouvé d'étiquette pour enregistrer la date malheureusement - la chose la plus proche disponible est Year
(entier) :-(
par programmation, vous pouvez lire et écrire la plupart de ces balises .NET à l'aide de Taglib Sharp du projet mono. Les sources et les binaires sont disponibles sur le banshee serveur FTP. Il a une liste assez impressionnante de formats qu'il supporte (mais encore, assurez - vous d'attraper des exceptions quand vous essayez de lire ou d'écrire des tags - il jettera chaque fois qu'il trouve un fichier qu'il ne peut pas comprendre, quelque chose qui m'est arrivé plusieurs fois pour ma modeste collection de la maison enregistrement.)
À lire les étiquettes:
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 même é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();
}
avoir un try to exiftools ou mediainfo, qui vous fournit une fonction d'exportation en tant que texte. Faites attention à la lumière du jour.
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 (tags EXIF) sur le fichier, telles qu'un horodatage ou des informations de caméra ou de géolocalisation. Les tags ID3 dans les fichiers MP3 sont également très fréquents. Mais c'est beaucoup moins fréquent de voir ce genre de métadonnées dans les fichiers vidéo.
si vous avez juste besoin d'un outil pour lire ces données à partir de fichiers manuellement, GSpot pourrait faire le astuce: http://www.videohelp.com/tools/Gspot
Si vous lisez ceci dans le code alors j'imagine chaque format de conteneur va avoir ses propres normes et chacun va prendre un peu de recherche et de mise en œuvre à l'appui.
pour moi le mtime (temps de modification) est aussi plus tôt que la date de création dans beaucoup de cas (la plupart) puisque, comme vous le dites, toute réorganisation modifie le temps de création. Cependant, L'AFAIUI de mtime est une réflexion précise du moment où le contenu du fichier a été réellement changé, donc devrait être un enregistrement précis de la date de capture vidéo.
après avoir découvert cet échec des métadonnées pour les fichiers de film, je vais renommer mes vidéos en fonction de leur mtime donc j'ai ceci stocké dans un plus robuste chemin!
le meilleur moyen que j'ai trouvé pour obtenir la date" dateTaken " pour la vidéo ou les photos 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 de shell, qui est interne à Microsoft, et ne dépend d'aucune autre dll externe.