2010-06-23 128 views
15

właściwości> data utworzenia ... myślałem, że to oznacza datę utworzenia filmu, ale w końcu zdałem sobie sprawę, że data zmienia się za każdym razem, kiedy się poruszam, reorganizuję, a nawet otwieram plik. często data modyfikacji jest wcześniejsza niż data utworzenia. data wykonania jpeg jest łatwo dostępna. czy istnieje sposób na uzyskanie tych samych informacji z pliku AVI lub MP4? dziękuję za wszelkie informacje, które możesz podać.Jak znaleźć datę nagrania wideo (.AVI .MP4)?

+0

Myślę, że ta odpowiedź: http://stackoverflow.com/questions/26051273/whats-the-best-way-to-get-video-metadata-from-a-mp4-file-in-asp-net- mvc-using-c ma rozwiązanie. – Beniamin

Odpowiedz

0

Istnienie tego fragmentu metadanych jest całkowicie zależne od aplikacji, która napisała plik. Bardzo często ładuje się pliki JPG z metadanymi (znacznikami EXIF) o pliku, takimi jak znacznik czasu lub informacje o kamerze lub geolokalizacji. Znaczniki ID3 w plikach MP3 są również bardzo popularne. Ale o wiele mniej powszechne jest oglądanie tego rodzaju metadanych w plikach wideo.

Jeśli wystarczy narzędzia ręczne odczytać te dane z plików, GSpot może załatwić sprawę: http://www.videohelp.com/tools/Gspot

Jeśli chcesz przeczytać w kodzie potem wyobrazić każdy format kontenera będzie mieć swój własny standardów, a każdy z nich wymaga trochę badań i wdrożenia, aby wesprzeć.

5

Nie wydaje się być dobrze zdefiniowany standard metadanych wideo (w porównaniu do zdjęć i plików audio, które mają EXIF ​​i ID3/itp. Odpowiednio)

Niektóre znaczniki istnieje jak na przykład Tytuł, kompozytor itp. Możesz zobaczyć te, jeśli wybierzesz plik filmowy w Windows 7 (może również wcześniejsze wersje) explorer lub kliknij prawym przyciskiem myszy i zobacz właściwości. Niestety nie udało się znaleźć znacznika daty nagrania - najbliższa dostępna opcja to: Year (liczba całkowita) :-(

Programowo większość tych znaczników można odczytać i zapisać w .NET przy użyciu Taglib Sharp z projektu mono. Pliki binarne są dostępne na banshee FTP server. Ma całkiem imponującą listę obsługiwanych formatów (ale mimo to upewnij się, że przechwytujesz wyjątki podczas próby odczytu lub zapisu tagów - wyrzuci, gdy tylko znajdzie plik, którego nie może zrozumieć, coś, co stało się . mi kilka razy na mojej skromnej kolekcji nagrań domowych)

Aby czytać tagi:

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. 
    } 
} 

I podobnie, aby zapisu metadanych powrotem do pliku:

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

Dla mnie (czas modyfikacji) mtime jest wcześniejsza niż data utworzenia w wielu (większości) przypadków, ponieważ, jak mówisz, każda reorganizacja modyfikuje czas tworzenia. Jednak mtime AFAIUI jest dokładnym odzwierciedleniem, kiedy zawartość pliku została faktycznie zmieniona, więc powinien być dokładnym zapisem daty przechwytywania wideo.

Po wykryciu tego błędu metadanych plików filmów, będę zmieniać nazwę moich filmów na podstawie ich mtime, więc mam to przechowywane w bardziej solidny sposób!

1

Spróbuj użyć funkcji exiftools lub mediainfo, która zapewnia funkcję eksportu jako tekst. Zwróć uwagę na oszczędność czasu.

0

Najlepszym sposobem znalazłem uzyskiwania „dateTaken” datę wideo lub zdjęć jest użycie:

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 

Powyższy kod wymaga API Shell, która znajduje się wewnątrz firmy Microsoft, a nie zależy na jakiejkolwiek innej zewnętrznej bibliotece DLL.

Powiązane problemy