Video 我可以从AVI文件的何处提取记录的日期? 问题被解释了

Video 我可以从AVI文件的何处提取记录的日期? 问题被解释了,video,metadata,avi,Video,Metadata,Avi,我试图从一些AVI文件中提取记录的日期(在这个特殊的例子中是用索尼DV摄像机创建的) 在不了解格式的情况下,我已经能够使用以下引用理解文件中主要块中的元数据: 我一直在搜索日期的存储位置,但运气不好。我得到的最接近的答案是来自MediaInfo论坛的以下答案,但我没有从中找到足够的理由来解决这个问题: 我知道记录的日期在文件元数据的某个地方,因为索尼的PlayMemories能够显示它,MediaInfo也是如此 我需要了解记录日期如何存储在文件中的详细信息: 哪一块 什么偏移量 以什么形式 在

我试图从一些AVI文件中提取记录的日期(在这个特殊的例子中是用索尼DV摄像机创建的)

在不了解格式的情况下,我已经能够使用以下引用理解文件中主要块中的元数据:

我一直在搜索日期的存储位置,但运气不好。我得到的最接近的答案是来自MediaInfo论坛的以下答案,但我没有从中找到足够的理由来解决这个问题:

我知道记录的日期在文件元数据的某个地方,因为索尼的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>
    
    
    ...            
    
    启发式方法? 我也一直在想,既然我知道我正在测试的文件的日期,那么也许我可以在二进制文件中搜索它,以这样的方式定位字节位置。 然而,我首先需要知道(或者猜测)日期是以什么样的二进制格式存储的。对于我正在测试的文件,日期在MediaInfo中报告为“2007-08-12 12:30:27.000”(与PlayMemories中一样)。 任何关于如何在二进制文件中搜索日期的建议也将不胜感激

    附加信息/测试结果 通过检查,我发现日期并没有存储在垃圾块中,因为它是完全空白的(全部为零)

    我还尝试过以各种方式(使用HxD十六进制编辑器)在二进制文件中搜索日期,但没有成功:

    • 以整数形式搜索“2007”-在movi块中仅出现一次-不应为整数(修改时无效)
    • 以浮点形式搜索“2007”-未出现
    • 以ascii字符串形式搜索“2007”-未出现
    • 作为十六进制字符串搜索“2007”-在movi块中只出现一次-不应该是它(修改时没有效果)
    • 搜索日期(“2007-08-12 12:30:27.000”)作为unix时间戳(“1186921827”)作为整数和浮点-未出现
    直觉 我知道它不在这一块:垃圾

    我不希望它出现在这些块中:hdrl、avih、strl、strh、strf

    如果是这样的话,那么它应该在其中一个中:indx,odml,dmlh,(movi,idx1)

    现状 我基本上无法找出日期存储的方式和位置,所以我的问题仍然没有解决

    我的二进制搜索没有结果这一事实让我有点困惑


    任何帮助都将不胜感激。:)

    在Linux下,您可以尝试
    avprobe
    ,它是
    libav
    ()的一部分。看看那里的
    创建时间

    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
    

    我认为问题是“我需要找出的是记录日期存储在哪个区块、偏移量和格式……”,而不是如何找出创建时间是的,这是正确的。我可以使用其他应用程序(如PlayMemories和MediaInfo)查找日期,但我的问题是如何用我自己的代码从文件本身提取日期。我不确定这是否对您有帮助,但请看一看@它似乎可以包含此类信息,例如:内部有
    DateTime1
    DateTime2
    标记。也许这是正确的方法。是的,垃圾块可能是存储日期的地方,正如您的链接在Penatax摄像头的案例中所解释的那样。所以,谢谢你的建议。:)我正在处理的文件(用索尼相机录制的)也可能是这样,但如果是这样,我仍然不确定它的确切位置和格式。如果您能提供任何相关信息,我们将不胜感激。正如我在正文中所添加的,垃圾块最终被证明是一条死胡同(我不知道,但是——如果你可以用来查看日期的任何工具都是开源的,你可以通过这些工具找出它们是如何获得的?