Откуда в файле AVI я могу извлечь записанную дату?
Проблема объяснила
Я пытаюсь извлечь записанную дату из некоторых файлов AVI (в данном конкретном случае, созданных с помощью видеокамеры Sony DV).
Начав без знания формата, я смог разобраться в метаданных в основных фрагментах файла, используя следующую ссылку: https://msdn.microsoft.com/en-us/library/windows/desktop/dd318189(v=vs.85).aspx
Я много искал, чтобы узнать, где хранится дата, но безуспешно. Самым близким, что я получил, был следующий ответ с форума MediaInfo, но мне не удалось найти в нем достаточного смысла для решения проблемы: https://sourceforge.net/p/mediainfo/discussion/297610/thread/8bb6e526/
Я знаю, что записанная дата находится где-то в метаданных файла, потому что Sony PlayMemories может отображать ее, как и MediaInfo.
Что мне нужно выяснить, так это детали того, как записанная дата хранится в файле:
- в каком куске
- по какому смещению
- в каком формате
Любая помощь по этому вопросу будет принята с благодарностью.:)
Я извлек список фрагментов в файле, который я тестирую (см. Листинг ниже), но я не уверен, в каком блоке хранится дата.
<RIFF - AVI - size="11969600" offset="0">
<LIST - hdrl - size="33330" offset="12">
<avih size="56" offset="24"></avih>
<LIST - strl - size="16500" offset="88">
<strh size="56" offset="100"></strh>
<strf size="40" offset="164"></strf>
<indx size="16376" offset="212"></indx>
</LIST>
<LIST - strl - size="16478" offset="16596">
<strh size="56" offset="16608"></strh>
<strf size="18" offset="16672"></strf>
<indx size="16376" offset="16698"></indx>
</LIST>
<LIST - odml - size="260" offset="33082">
<dmlh size="248" offset="33094"></dmlh>
</LIST>
</LIST>
<JUNK size="1446" offset="33350"></JUNK>
<LIST - movi - size="11932228" offset="34804">
<00db size="144000" offset="34816"></00db>
<01wb size="5120" offset="178824"></01wb>
...
<00db size="144000" offset="11816560"></00db>
<01wb size="5120" offset="11960568"></01wb>
<ix00 size="664" offset="11965696"></ix00>
<ix01 size="664" offset="11966368"></ix01>
</LIST>
<idx1 size="2560" offset="11967040"></idx1>
</RIFF>
Эвристический подход?
Я также думал, что, поскольку я знаю дату файла, на котором я тестирую, возможно, я каким-то образом смогу найти его в двоичном файле, чтобы определить местоположение байтов таким образом. Однако тогда мне сначала нужно было бы узнать (или предположить), в каком двоичном формате хранится дата. Для файла, на котором я тестирую, дата указывается как "2007-08-12 12:30:27.000" в MediaInfo (как в PlayMemories). Любые предложения о том, как искать дату в двоичном файле также будут оценены.
Дополнительная информация / результаты испытаний
Я обнаружил путем проверки, что дата не сохраняется в блоке JUNK, так как она полностью пуста (все нули).
Я также пытался искать дату в двоичном файле различными способами (используя шестнадцатеричный редактор HxD), но безуспешно:
- Искал "2007" как целое число - только один случай в блоке movi - не должно быть (не изменилось)
- Искал "2007" как число с плавающей точкой - никаких случаев
- Искал "2007" как строку ascii - нет случаев
- Поиск "2007" как шестнадцатеричной строки - только один случай в фрагменте movi - не должен быть этим (не имел никакого эффекта при изменении)
- Поиск даты ("2007-08-12 12:30:27.000") в виде метки времени Unix ("1186921827") в виде целого числа и числа с плавающей запятой - не встречается
Чувство кишки
Я знаю, что это не в этом куске: JUNK
Я не ожидаю, что это будет в любом из этих кусков: hdrl, avih, strl, strh, strf
Если так, то это должно быть в одном из них: indx, odml, dmlh, (movi, idx1)
Текущее состояние
Я в основном не смог выяснить, как и где хранится дата, поэтому моя проблема остается нерешенной...
Тот факт, что мой бинарный поиск не дал результатов, немного озадачил меня...
Любая помощь будет высоко оценен.:)
2 ответа
Несколько лет спустя, но ... Привет,DVdate позволяет пакетно переименовывать файлы AVI с кодом даты и временным кодом.
https://paulglagla.com/en/dvdate-2/ Может быть, вам удастся получить от него помощь.
Под Linux вы можете попробовать avprobe
которая является частью libav
( https://libav.org/download/). Посмотри на creation_time
:
avprobe capture.mp4
avprobe version 9.18-6:9.18-0ubuntu0.14.04.1+fdkaac, Copyright (c) 2007-2014 the Libav developers
built on Apr 10 2015 23:22:24 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'capture.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isom
creation_time : 2016-03-24 12:31:18
Duration: 01:22:33.57, start: 0.000000, bitrate: 1957 kb/s
Stream #0.0(eng): Video: h264 (Main), yuv420p, 960x540 [PAR 1:1 DAR 16:9], 1764 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc
Metadata:
creation_time : 2016-03-24 12:31:18
Stream #0.1(deu): Audio: aac, 48000 Hz, stereo, fltp, 189 kb/s
Metadata:
creation_time : 2016-03-24 12:31:18
# avprobe output