как мне найти дату, когда видео (.AVI .MP4) было действительно записано? - PullRequest
22 голосов
/ 23 июня 2010

свойства> дата создания ... я думал, что это означало дату создания видео, но наконец понял, что дата меняется каждый раз, когда я перемещаю, реорганизую, даже открываю файл.часто дата изменения предшествует дате создания.дата, когда был взят JPEG, легко доступна.Есть ли способ получить ту же информацию из файла AVI или MP4?спасибо за любую информацию, которую вы можете дать.

Ответы [ 6 ]

6 голосов
/ 20 июля 2011

Кажется, что нет четко определенного стандарта для метаданных видео (по сравнению с фотографиями и аудиофайлами, которые имеют EXIF ​​и ID3 / и т. Д. Соответственно)

Существуют некоторые теги, такие как, например, Title, Composer и т. Д.Вы можете увидеть их, если выберете файл фильма в проводнике Windows 7 (возможно, и в более ранних версиях) или щелкните правой кнопкой мыши и просмотрите свойства.К сожалению, я не нашел тега для даты записи - ближайшая доступная вещь - Year (целое число): - (

Программно, вы можете читать и писать большинство этих тегов в .NET, используя TaglibSharp из моно-проекта. Исходный код и двоичные файлы доступны на FTP-сервере banshee . У него довольно внушительный список поддерживаемых форматов (но, тем не менее, убедитесь, что вы перехватываете исключения при попытке прочитать илиписать теги - он будет выдавать каждый раз, когда находит файл, который не может понять, что случилось со мной несколько раз для моей скромной коллекции домашних записей.)

Чтобы прочитать теги:

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

И аналогично записать метаданные обратно в файл:

using (var f = TagLib.File.Create(@"c:\Path\To\MyVideo.mp4"))
{
    f.Tag.Title = "My Awesome Movie";
    f.Tag.Year = (uint)2011;
    f.Save();
}
4 голосов
/ 01 апреля 2019

Быстрая команда для поиска метаданных даты / времени во многих видеофайлах

Следующая команда хорошо мне помогла в поиске метаданных даты / времени в различных видео AVI / MP4:

ffmpeg -i /path/to/video.mp4 -dump

Примечание: как уже упоминалось в других ответах, нет никакой гарантии, что такая информация доступна во всех видеофайлах или доступна в определенном формате.

Сокращенный пример вывода для некоторых файлов AVI

    Metadata:
      Make            : FUJIFILM
      Model           : FinePix AX655
      DateTime        : 2014:08:25 05:19:45
      JPEGInterchangeFormat:     658
      JPEGInterchangeFormatLength:    1521
      Copyright       :     
      DateTimeOriginal: 2014:08:25 05:19:45
      DateTimeDigitized: 2014:08:25 05:19:45

Сокращенный пример вывода для некоторых файлов MP4

  Metadata:
    major_brand     : mp41
    minor_version   : 538120216
    compatible_brands: mp41
    creation_time   : 2018-03-13T15:43:24.000000Z
1 голос
/ 23 июня 2015

Попробуйте exiftools или mediainfo, которая предоставляет вам функцию экспорта в виде текста.Просто обратите внимание на летнее время.

1 голос
/ 23 июня 2010

Наличие этого фрагмента метаданных полностью зависит от приложения, написавшего файл. Очень часто загружаются файлы JPG с метаданными (тегами EXIF) о файле, такими как отметка времени, информация о камере или геолокация. Тэги ID3 в файлах MP3 также очень распространены. Но метаданные такого типа встречаются гораздо реже в видеофайлах.

Если вам просто нужен инструмент для чтения этих данных из файлов вручную, GSpot может сделать это: http://www.videohelp.com/tools/Gspot

Если вы хотите прочитать это в коде, то я думаю, что у каждого формата контейнера будут свои стандарты, и для поддержки каждого потребуется небольшое исследование и реализация.

0 голосов
/ 16 июля 2017

Лучший способ получения даты "dateTaken" для видео или изображений - использовать:

 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

Для приведенного выше кода требуется API оболочки, который является внутренним для Microsoft и независит от любых других внешних DLL.

0 голосов
/ 05 сентября 2013

Для меня mtime (время модификации) также раньше даты создания во многих (большинстве) случаях, поскольку, как вы говорите, любая реорганизация изменяет время создания.Однако mtime AFAIUI является точным отражением того, когда содержимое файла было фактически изменено, поэтому должна быть точная запись даты захвата видео.

После обнаружения сбоя метаданных для файлов фильмов я собираюсь переименовать свойвидео, основанные на их mtime, поэтому я храню их более надежно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...