首页 文章

使用php提取文件的元数据

提问于
浏览
2

现在有很多文件格式(音频,视频,图像,文本) . 我希望编写一个php代码,可以获取文件的元数据,而不管其格式如何 .

要获取基本元数据(文件名,文件大小,文件类型和上次修改日期),可以使用文件系统API:

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
    output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                 f.size, ' bytes, last modified: ',
                 f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                 '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }
  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

但是,我希望提取 every damn possible thing 我可以设法从文件中提取(每个可能的元数据) .

例如:对于jpg图像,在提取其元数据时,我得到(使用exif标签):

FILE.FileName: idfo1.jpg 
FILE.FileDateTime: 1369637595 
FILE.FileSize: 126948 
FILE.FileType: 2  
FILE.MimeType: image/jpeg 
FILE.SectionsFound: ANY_TAG, IFD0, EXIF 
COMPUTED.html: width="915" height="1246" 
COMPUTED.Height: 1246 
COMPUTED.Width: 915 
COMPUTED.IsColor: 1 
COMPUTED.ByteOrderMotorola: 1 
COMPUTED.ApertureFNumber: f/2.6 
COMPUTED.UserComment:  
IFD0.ImageWidth: 2048 
IFD0.ImageLength: 1536 
IFD0.Make: SAMSUNG 
IFD0.Model: GT-S5830 
IFD0.Software: S5830DXKPD 
IFD0.DateTime: 2012:06:06 10:18:24 
IFD0.YCbCrPositioning: 1 
IFD0.Exif_IFD_Pointer: 2232 
IFD0.UndefinedTag:0xEA1C: ê 
EXIF.ExposureTime: 1/229 
EXIF.FNumber: 26/10 
EXIF.ExposureProgram: 3 
EXIF.ISOSpeedRatings: 50 
EXIF.ExifVersion: 0220 
EXIF.DateTimeOriginal: 2012:06:06 10:18:24 
EXIF.DateTimeDigitized: 2012:06:06 10:18:24    
EXIF.MaxApertureValue: 30/10 
EXIF.MeteringMode: 3 
EXIF.Flash: 0 
EXIF.FocalLength: 355/100 
EXIF.UserComment:  
EXIF.ColorSpace: 1 
EXIF.ExifImageWidth: 2048 
EXIF.ExifImageLength: 1536 
EXIF.ExposureMode: 0 
EXIF.WhiteBalance: 0 
EXIF.SceneCaptureType: 0 
EXIF.UndefinedTag:0xEA1C: ê

如果可能的话,我希望得到地理标记数据 .

同样,对于视频和音频类型文件,我希望得到:

  • 比特率(音频和视频)

  • 持续时间

  • 文件创建日期

  • 评论

  • 框架尺寸等

是否有任何 phpjavascript 代码可以直接为我这样做?

2 回答

  • 1

    NO, there's no such a thing! 您必须编写自己的代码,因为有数千种音频和视频格式,不同的编解码器,不同的压缩,模式等 . 您必须为每种格式编写自己的代码 .

    例如,基于所使用的编解码器,视频AVI文件可能包含许多不同的元数据 - 取决于编解码器(其中有数百个) .

    可能你需要很多经验和数月的编码和测试,但肯定没有快速的解决方案 .

    您可以找到一些基本工具,但在您可能使用的每种文件类型中都找不到 every damn possible thing .

    如果我错了,你可以找到一些库来做,请分享,但逻辑说你想要的东西不存在 .

  • 0

    对于许多媒体类型,有一个名为getid3()的类 . 它使用起来非常简单,非常强大 . 你可以读取和写入文件元数据 .

    还有一些javascript类来读取文件中的exif,id3等元数据 .

    搜索“使用javascript读取exif数据”或“JavaScript ID3 Reader”

    如果你有自己的服务器,你也可以使用一些命令行工具(你从php执行),可以读取exif,id3标签以及像atomparsley这样的新mp4标签

    这里列出了你可以用getid3和php做的事情

    Tag formats:
    ID3v1 (v1.0 & v1.1)
    ID3v2 (v2.2, v2.3 & v2.4)
    APE tags (v1 & v2)
    (Ogg) VorbisComment
    Lyrics3 (v1 & v2)
    IDivX
    Lossy Audio-only formats:
    MP3, MP2, MP1 (MPEG-1, layer III/II/I audio, including Fraunhofer, Xing and LAME VBR/CBR headers)
    Ogg Vorbis
    Musepack (versions SV4-SV8)
    AAC & MP4
    AC-3
    DTS (including DTS-in-WAV)
    RealAudio
    VQF
    Speex
    Digital Speech Standard (DSS)
    Audible Audiobooks
    Lossless Audio-only formats:
    WAV (including extended chunks such as BWF and CART)
    AIFF
    Monkey's Audio
    FLAC & OggFLAC
    LA (Lossless Audio)
    OptimFROG
    WavPack
    TTA
    LPAC (Lossless Predictive Audio Compressor)
    Bonk
    LiteWave
    Shorten
    RKAU
    Apple Lossless Audio Codec
    RealAudio Lossless
    CD-audio (*.cda)
    NeXT/Sun .au
    Creative .voc
    AVR (Audio Visual Research)
    MIDI
    Audio-Video formats:
    AVI
    Matroska (WebM)
    ASF (ASF, Windows Media Audio (WMA), Windows Media Video (WMV))
    MPEG-1 & MPEG-2
    Quicktime (including MP4)
    RealVideo
    NSV (Nullsoft Streaming Video)
    Graphic formats:
    JPEG
    PNG
    GIF
    BMP (Windows & OS/2)
    TIFF
    SWF (Flash)
    PhotoCD
    Data formats:
    ZIP
    TAR
    GZIP
    ISO 9660 (CD-ROM image)
    CUEsheets (.cue)
    SZIP
    Metadata types:
    EXIF (Exchangeable image file format)
    IPTC
    XMP (Adobe Extensible Metadata Platform)
    Formats identified, but not parsed:
    PDF
    RAR
    MS Office (.doc, .xls, etc)
    

相关问题