使用php提取文件的元数据

Extracting metadata of a file using php

本文关键字:元数据 文件 提取 php 使用      更新时间:2023-09-26

现在有很多种文件格式(音频、视频、图像、文本)。我希望写一个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>

但是,我希望提取每一个该死的可能的东西我可以从文件中提取(每一个可能的元数据)。

示例:对于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代码可以直接为我做这个?

有一个名为getid3()的类用于许多媒体类型。它使用起来非常简单,功能非常强大。U可以对元数据文件进行读写。

还有一些javascript类可以从文件中读取元数据,如exif,id3 .

搜索"read exif data with javascript"或"JavaScript ID3 Reader"

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

这里是你可以用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)

不,没有这样的事情!你必须自己写代码,因为有上千种格式的音频&视频,不同的编解码器,不同的压缩,模式等。你必须为它们每一个写你自己的代码。

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

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

你可能会找到一些基本的工具,但没有什么能找到所有可能的东西在你可能使用的每一个文件类型。

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