thuộc tính> ngày tạo ... tôi nghĩ rằng điều này có nghĩa là ngày video được tạo, nhưng cuối cùng nhận ra rằng ngày thay đổi mỗi khi tôi di chuyển, tổ chức lại, thậm chí mở một tập tin. thường, ngày sửa đổi sớm hơn ngày tạo. ngày một jpeg đã được thực hiện là có sẵn. có cách nào để có được cùng một thông tin từ một AVI hay MP4 FILE? cảm ơn bạn vì bất kỳ thông tin nào bạn có thể cung cấp.làm thế nào để tôi tìm thấy ngày một video (.AVI .MP4) đã thực sự được ghi lại?
Trả lời
Sự tồn tại của phần siêu dữ liệu đó hoàn toàn phụ thuộc vào ứng dụng đã viết tệp. Việc tải lên các tệp JPG có siêu dữ liệu (thẻ EXIF) rất phổ biến về tệp, chẳng hạn như dấu thời gian hoặc thông tin máy ảnh hoặc vị trí địa lý. Thẻ ID3 trong các tệp MP3 cũng rất phổ biến. Nhưng ít phổ biến hơn khi thấy loại siêu dữ liệu này trong tệp video.
Nếu bạn chỉ cần một công cụ để đọc dữ liệu từ tập tin bằng tay, GSpot thể làm như lừa: http://www.videohelp.com/tools/Gspot
Nếu bạn muốn đọc điều này trong mã sau đó tôi tưởng tượng mỗi định dạng container được sẽ có riêng của mình các tiêu chuẩn và mỗi tiêu chuẩn sẽ mất một chút nghiên cứu và thực hiện để hỗ trợ.
Có vẻ như không phải là một tiêu chuẩn được xác định rõ cho siêu dữ liệu video (so với hình ảnh và các tập tin âm thanh, trong đó có EXIF và ID3/etc. Tương ứng)
Một số thẻ tồn tại như ví dụ Tiêu đề, Nhà soạn nhạc, vv Bạn có thể xem chúng nếu bạn chọn một tập tin phim trong Windows 7 (có lẽ các phiên bản trước đó cũng) explorer hoặc nhấp chuột phải và xem thuộc tính. Tôi đã không tìm thấy thẻ cho ngày ghi âm không may - điều gần nhất có sẵn là Year
(số nguyên) :-(
Lập trình, bạn có thể đọc và viết hầu hết các thẻ này trong .NET bằng cách sử dụng Taglib Sharp từ dự án mono. Nó có một danh sách khá ấn tượng của các định dạng mà nó hỗ trợ (nhưng vẫn đảm bảo rằng bạn bắt được ngoại lệ khi cố gắng đọc hoặc viết thẻ - nó sẽ ném bất cứ khi nào nó tìm thấy một tập tin mà nó không thể hiểu được, tôi nhiều lần cho bộ sưu tập thu nhỏ tại nhà của tôi.)
Để đọc thẻ:
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.
}
}
Và tương tự, để ghi metadata trở lại file:
using (var f = TagLib.File.Create(@"c:\Path\To\MyVideo.mp4"))
{
f.Tag.Title = "My Awesome Movie";
f.Tag.Year = (uint)2011;
f.Save();
}
Đối với tôi mtime (thời gian sửa đổi) cũng sớm hơn ngày tạo là trong rất nhiều (hầu hết) Các trường hợp từ, như bạn nói, bất kỳ tổ chức lại nào cũng sẽ thay đổi thời gian tạo. Tuy nhiên, các AFAIUI mtime là một sự phản ánh chính xác khi nội dung tập tin đã thực sự thay đổi như vậy nên là một kỷ lục chính xác của ngày chụp video.
Sau khi phát hiện lỗi siêu dữ liệu này đối với tệp phim, tôi sẽ đổi tên video của mình dựa trên thời gian để tôi lưu trữ video này một cách mạnh mẽ hơn!
Hãy thử dùng exiftools hoặc mediainfo, cung cấp cho bạn chức năng xuất dưới dạng văn bản. Chỉ cần chú ý đến tiết kiệm ánh sáng ban ngày.
Cách tốt nhất tôi thấy nhận được sự "dateTaken" ngày cho một trong hai video hoặc hình ảnh là sử dụng:
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
Đoạn mã trên đòi hỏi các api vỏ, đó là nội bộ cho Microsoft, và không phụ thuộc trên bất kỳ dll bên ngoài nào khác.
Tôi nghĩ câu trả lời này: http://stackoverflow.com/questions/26051273/whats-the-best-way-to-get-video-metadata-from-a-mp4-file-in-asp-net- mvc-using-c có một giải pháp. – Beniamin