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>

但是,我希望提取我可以设法从文件中提取的所有可能的东西(所有可能的元数据)。

例如:对于 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代码可以直接为我执行此操作?

4

2 回答 2

1

许多媒体类型都有一个名为 getid3() 的类。它使用起来非常简单且功能强大..您可以将元数据读取和写入文件。

还有一些 javascript 类可以从文件中读取 exif、id3 等元数据。

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

如果你有自己的服务器,你也可以使用一些命令行工具(你从 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)
于 2013-06-04T01:33:27.180 回答
0

不,没有这样的事情!您必须编写自己的代码,因为有成千上万种音频和视频格式、不同的编解码器、不同的压缩、模式等。您必须为每种格式编写自己的代码。

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

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

您可能可以找到一些基本工具,但没有什么可以在您可能使用的每种文件类型中找到所有可能的东西

如果我错了,你可以找到一些图书馆来做到这一点,请分享,但逻辑上说你想要的东西不存在。

于 2013-06-04T01:26:53.027 回答