nass600/get-id3

处理音频/视频文件元数据的PHP库

安装数: 31 197

依赖者: 4

建议者: 0

安全性: 0

星标: 58

关注者: 7

分支: 18

开放问题: 2

类型:php-library

1.0.0 2015-12-10 22:41 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:35:26 UTC


README

这个库的唯一目的是为了将这个令人惊叹的库放在github上(它最初在sourceforge上),回到那时候。

官方仓库是https://github.com/JamesHeinrich/getID3,并由这个库的唯一作者维护。

///////////////////////////////////////////////////////////////// /// getID3() by James Heinrich info@getid3.org // // available at http://getid3.sourceforge.net // // or http://www.getid3.org // ///////////////////////////////////////////////////////////////// // // // changelog.txt - part of getID3() // // See readme.txt for more details // // /// /////////////////////////////////////////////////////////////////

    This code is released under the GNU GPL:
      https://gnu.ac.cn/copyleft/gpl.html

 +---------------------------------------------+
 | If you do use this code somewhere, send me  |
 | an email and tell me how/where you used it. |
 |                                             |
 | If you want to donate, there is a link on   |
 | http://www.getid3.org for PayPal donations. |
 +---------------------------------------------+

快速开始

Q: 如何检查getID3()在我的服务器/文件上是否正常工作? A: 将getID3()解压到一个目录中,然后访问/demos/demo.browse.php

支持

Q: 我有问题,或者发现了错误。我该怎么做? A: 最受欢迎的支持请求和/或错误报告方式是论坛http://support.getid3.org/

Sourceforge通知

强烈建议您注册Sourceforge的通知,以便在新版本发布时收到通知。请访问:http://sourceforge.net/project/showfiles.php?group_id=55859并点击小图标/链接“监控包”。如果您之前已注册邮件列表,请注意它已停止,现在将仅使用自动化的Sourceforge通知。

getID3()做什么?

读取并解析(程度不同): ¤ 标签

  • APE (v1 and v2)
  • ID3v1 (& ID3v1.1)
  • ID3v2 (v2.4, v2.3, v2.2)
  • Lyrics3 (v1 & v2)

¤ 有损音频

  • MP3/MP2/MP1
  • MPC / Musepack
  • Ogg (Vorbis, OggFLAC, Speex)
  • AC3
  • DTS
  • RealAudio
  • Speex
  • DSS
  • VQF

¤ 无损音频

  • AIFF
  • AU
  • Bonk
  • CD-audio (*.cda)
  • FLAC
  • LA (Lossless Audio)
  • LiteWave
  • LPAC
  • MIDI
  • Monkey's Audio
  • OptimFROG
  • RKAU
  • Shorten
  • TTA
  • VOC
  • WAV (RIFF)
  • WavPack

¤ 音视频

  • ASF: ASF, Windows Media Audio (WMA), Windows Media Video (WMV)
  • AVI (RIFF)
  • Flash
  • Matroska (MKV)
  • MPEG-1 / MPEG-2
  • NSV (Nullsoft Streaming Video)
  • Quicktime
  • RealVideo

¤ 静态图像

  • BMP
  • GIF
  • JPEG
  • PNG
  • TIFF
  • SWF (Flash)
  • PhotoCD

¤ 数据

  • ISO-9660 CD-ROM镜像(目录结构)
  • SZIP(有限支持)
  • ZIP(目录结构)
  • TAR
  • CUE

写入

  • ID3v1 (& ID3v1.1)
  • ID3v2 (v2.3 & v2.4)
  • VorbisComment on OggVorbis
  • VorbisComment on FLAC(非OggFLAC)
  • APE v2
  • Lyrics3(仅删除)

需求

  • 对于getID3() 1.7.x(及更早版本),需要PHP 4.2.0(或更高版本)
  • PHP 5.3.0(或更高版本)用于getID3() 1.8.x(及以上)
  • PHP 5.0.0(或更高版本)用于getID3() 2.0.x(及以上)
  • PHP至少需要4MB内存。强烈推荐8MB。加载所有模块时需要12MB。

用法

查看/demos/demo.basic.php,了解使用getID3()进行基本操作的方法,无复杂输出,仅扫描一个文件。

查看structure.txt以了解返回的数据结构。

例如,要查看getID3()的完整目录浏览和文件扫描实现,请运行 /demos/demo.browse.php

查看/demos/demo.mysql.php,了解一个示例递归扫描代码,它扫描指定目录及其所有子目录中的每个文件,并将结果存储在数据库中,允许进行各种分析/维护操作

要在HTTP或FTP上分析远程文件,您需要首先将其复制到本地,然后再运行getID3()。您的代码可能如下所示

// Copy remote file locally to scan with getID3()
$remotefilename = 'http://www.example.com/filename.mp3';
if ($fp_remote = fopen($remotefilename, 'rb')) {
    $localtempfilename = tempnam('/tmp', 'getID3');
    if ($fp_local = fopen($localtempfilename, 'wb')) {
        while ($buffer = fread($fp_remote, 8192)) {
            fwrite($fp_local, $buffer);
        }
        fclose($fp_local);

		// Initialize getID3 engine
		$getID3 = new getID3;

		$ThisFileInfo = $getID3->analyze($filename);

        // Delete temporary file
        unlink($localtempfilename);
    }
    fclose($fp_remote);
}

查看/demos/demo.write.php,了解如何写入标签。

返回的数据结构是什么样子的?

请参阅structure.txt

建议您查看/demos/demo.browse.php的输出,扫描您感兴趣的文件,以确认通常返回哪些数据以及您的特定文件中返回哪些数据,因为实际返回的数据可能因文件本身中可用信息而有所不同。

注意

getID3() 1.x:如果格式解析器遇到严重问题,它将在$fileinfo['error']中返回某些内容,描述遇到的问题。如果生成较轻的错误或警告,它将出现在$fileinfo['warning']中。这两个键都可能包含多个警告或错误。如果在['error']中返回了某些内容,则文件未正确解析,返回的数据可能不正确或不完整。如果在['warning'](而不是['error'])中返回了某些内容,则返回的数据是正确的——通常getID3()正在报告文件中由于其他程序中已知的错误而解决的问题。一些警告可能表明返回的数据是正确的,但由于文件中的错误,某些数据无法提取。

getID3() 2.x:除错误抛出(因此您将只获得一个错误)之外,其余内容与上述内容相同。

免责声明

getID3()已在许多系统、许多类型的文件、许多操作系统下进行了测试,通常被认为是稳定和安全的。话虽如此,仍然存在未发现和/或未修复的bug可能会损坏您的文件的风险,尤其是在写入函数中。通过使用getID3(),您同意如果您的任何文件被损坏,这不是我的责任。实际上,我对任何事情都不承担责任:)

许可协议

GNU通用公共许可证——请参阅license.txt

此程序是免费软件;您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它;许可证的版本2,或(根据您的选择)任何较新版本。

此程序是根据希望其对您有用的前提下分发的,但没有任何保证;甚至没有关于适销性或适用于特定目的的暗示性保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已随本程序收到GNU通用公共许可证的副本;如果没有,请写信至:自由软件基金会,Inc. 59 Temple Place - Suite 330 波士顿,MA 02111-1307,USA。

常见问题解答:问:我可以在我的程序中使用getID3()吗?我需要商业许可证吗?答:您通常可以自由使用getID3,只要您认为合适。您唯一需要商业许可证的情况是如果您正在销售集成getID3的封闭源代码程序。如果您销售包含getID3副本的程序,那是可以的,只要您在销售时包括源代码副本。或者,您可以在不包含getID3的情况下分发您的代码,并说明“从getid3.sourceforge.net下载”。

为什么它被称为"getID3()",如果它做了这么多不仅仅是那样的事情?

版本0.1实际上确实做了这样的事情。我没有那么古老的代码副本,但我可以写一个单行函数来实现它:function getID3($filename) { return unpack('a3TAG/a30title/a30artist/a30album/a4year/a28comment/c1track/c1genreid', substr(file_get_contents($filename), -128)); }

未来计划

http://www.getid3.org/phpBB3/viewforum.php?f=7

  • 更好的MP4容器格式支持
  • 根据ID3v2.4规范(第5.0节)扫描文件末尾附加的ID3v2标签
  • 支持JPEG-2000 (http://www.morgan-multimedia.com/jpeg2000_overview.htm)
  • 支持MOD (mod/stm/s3m/it/xm/mtm/ult/669)
  • 支持ACE(感谢Vince)
  • 支持除Vorbis、Speex和OggFlac之外的Ogg(即Ogg+Xvid)
  • 为缺少VBR头的VBR MP3创建Xing/LAME VBR头
  • 能够“清理”ID3v2填充(用有效填充替换无效填充)
  • 如果MP3在流中改变版本则警告(在全文扫描模式下)
  • 在直方图扫描中检查损坏的中文件MP3流
  • 支持无损压缩格式(《http://www.firstpr.com.au/audiocomp/lossless/#Links》)(《http://compression.ca/act-sound.html》)(《http://web.inter.nl.net/users/hvdh/lossless/lossless.htm》)
  • 支持RIFF-INFO块
    • 《http://lotto.st-andrews.ac.uk/~njh/tag_interchange.html》(感谢Nick Humfrey <njhØsurgeradiocouk>)
    • 《http://abcavi.narod.ru/sof/abcavi/infotags.htm》(感谢Kibi)
  • 更好的Bink视频支持
  • 《http://www.hr/josip/DSP/AudioFile2.html》
  • 《http://www.pcisys.net/~melanson/codecs/》
  • 检测mp3PRO
  • 支持PSD
  • 支持JPC
  • 支持JP2
  • 支持JPX
  • 支持JB2
  • 支持IFF
  • 支持ICO
  • 支持ANI
  • 支持EXE(注释、作者等)(感谢pquaedackersØplanetnl)
  • 支持DVD-IFO(区域、字幕、宽高比等)(感谢pquaedackersØplanetnl)
  • 更完全的SWF支持 - 解析封装的MP3和/或JPEG内容(感谢n8n8Øyahoo*com)
  • 支持a2b
  • 可选的AVI验证帧扫描(感谢rockcohenØmassive-interactive*nl)
  • 支持TTF(感谢infoØbutterflyx*com)
  • 支持DSS(《http://www.getid3.org/phpBB3/viewtopic.php?t=171》)
  • 支持SMAF(《http://smaf-yamaha.com/what/demo.html》)(《http://www.getid3.org/phpBB3/viewtopic.php?t=182》)
  • 支持AMR(《http://www.getid3.org/phpBB3/viewtopic.php?t=195》)
  • 支持3gpp(《http://www.getid3.org/phpBB3/viewtopic.php?t=195》)
  • 支持ID4(《http://www.wackysoft.cjb.net》 grizlyY2KØhotmail*com)
  • 解析Ogg注释中返回的XML数据
  • 解析Quicktime SMIL元文件中的XML数据(klausrathØmac*com)
  • ID3v2流派字符串生成函数
  • 更完全的JPG解析
  • 支持所有旧式ASF数据包
  • ASF/WMA/WMV标签写入
  • 解析声明的T??? ID3v2文本信息帧,如果适当的话(感谢Christian Fritz的想法)
  • 识别编码器: http://www.guerillasoft.com/EncSpot2/index.html http://ff123.net/identify.html http://www.hydrogenaudio.org/?act=ST&f=16&t=9414 http://www.hydrogenaudio.org/?showtopic=11785
  • 支持其他OS/2位图结构:位图数组('BA'),彩色图标('CI'),彩色指针('CP'),图标('IC'),指针('PT') http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
  • 支持WavPack RAW模式
  • ASF/WMA/WMV数据包解析
  • ID3v2FrameFlagsLookupTagAlter()
  • ID3v2FrameFlagsLookupFileAlter()
  • 遵守ID3v2标签更改/保留/丢弃规则
  • http://www.geocities.com/SiliconValley/Sector/9654/Softdoc/Illyrium/Aolyr.htm
  • 在ID3v2写入时正确检查LINK/LNK帧的有效性
  • 在ID3v2写入时正确检查ASPI-TLEN帧的有效性
  • 在ID3v2写入时正确检查COMR帧的有效性
  • http://www.geocities.co.jp/SiliconValley-Oakland/3664/index.html
  • 将GEOB ID3v2结构解码为RealJukebox编码,将NCON ID3v2结构解码为MusicMatch编码(可能不会发生 - 格式是专有的)

getID3()中已知的错误/问题,可能最终会被修复

http://www.getid3.org/phpBB3/viewtopic.php?t=25

  • 无法确定VBR视频数据的MPEG视频的比特率(需要文档)
  • 无法确定MPEG视频的交错/逐行扫描(需要文档)
  • MIDI播放时间有时不准确
  • AAC-RAW模式文件无法识别
  • WavPack-RAW模式文件无法识别
  • mp4文件报告大量“未知QuickTime原子类型”(需要文档)
  • 加密的ASF/WMA/WMV文件警告“未处理的GUID ASF_Content_Encryption_Object”
  • NSV中音频和视频之间的比特率无法计算,只有总比特率。(需要文档)
  • 所有Ogg格式(Vorbis,OggFLAC,Speex)都受到大VorbisComments跨越多个Ogg页面的问题的困扰,但只有OggVorbis文件可以使用vorbiscomment进行处理。
  • Mac OS 10.2.8(也许还有其他版本)中提供的“head”版本只理解单个选项(-n),因此失败。getID3()忽略此问题并返回错误的md5_data。

getID3()中已知的错误/问题,无法修复

http://www.getid3.org/phpBB3/viewtopic.php?t=25

  • 仅限32位PHP安装:由于32位PHP文件系统函数的限制,getID3()无法始终完全解析大于2GB的文件。注意:自v1.7.8b3以来,对大于2GB的文件有部分支持,其中大部分将解析正常,只要没有关键数据位于2GB偏移量之外。已知将工作
    • 64位PHP上的所有文件格式
    • ZIP(格式不支持大于2GB的文件)
    • FLAC(当前编码器不支持大于2GB的文件)已知无法工作
    • ID3v1标签(始终位于文件末尾)
    • Lyrics3标签(始终位于文件末尾)
    • APE标签(始终位于文件末尾)可能工作
    • Quicktime(如果需要的元数据在2GB偏移量之前,则可以工作,即如果文件已被提示/优化为流式传输)
    • RIFF.WAV(应该工作得很好,但会警告无法解析所有块)
    • RIFF.AVI(播放时间可能不正确,仅基于适合第一个2GB的“movi”块,应该发出错误以显示播放时间不正确。其他数据应该大致正确,假设数据在文件中保持不变)

其他程序中的已知错误/问题

http://www.getid3.org/phpBB3/viewtopic.php?t=25

  • Windows Media Player(最高v11)和iTunes(最高v10+)不正确处理UTF-16BE+BOM编码的ID3v2.3标签(它们假定数据是UTF-16LE+BOM,要么崩溃(WMP),要么输出亚洲字符集(iTunes))
  • Winamp(至少v2.80)不支持ID3v2.4标签,仅支持ID3v2.3见:http://forums.winamp.com/showthread.php?postid=387524
  • 某些版本的Helium2(www.helium2.com)不写入符合ID3v2.4的帧大小,尽管标签被标记为ID3v2.4)(由getID3()检测)
  • MP3ext V3.3.17在ID3v2头部末尾放置了一个不合规的填充字符串。据说在v3.4b21中已经修复,但前提是您必须手动添加注册表键。这个修复尚未得到确认。(由getID3()检测)
  • CDex v1.40(由v1.50b7修复)写入不合规的Ogg注释字符串,应该是"NAME=value"格式,但实际上只写成了"value"(由getID3()检测)
  • Oggenc 0.9-rc3无论实际是ABR还是VBR,都将编码的文件标记为ABR。
  • iTunes(版本"X v2.0.3"和"v3.0.1"已被证实有罪,可能其他版本也是如此)使用ID3v2.3不合法的框架名'COM '写入ID3v2.3注释标签(由getID3()检测)
  • MP2enc无法正确编码单声道CBR MP2文件(声音半速且播放时间加倍)
  • MP2enc无法正确编码单声道VBR MP2文件(实际上编码为立体声)
  • tooLAME无法正确编码单声道VBR MP2文件(实际上编码为立体声)
  • AACenc即使指定了CBR模式,也会以VBR模式(实际上是ABR)编码文件
  • AAC/ADIF - 对于VBR文件,比特率模式 = cbr
  • LAME 3.90-3.92在CBR模式下使用DLL编码时,会在一个空数据框架之前添加一个框架(用于LAME/VBR头部的空间,但实际上从未写入)
  • Ahead Nero使用DSIZ值(应该是字节数的文件大小)为"TwinVQF v1.0"的"0"和"TwinVQF v2.0"的"1"来编码TwinVQF(由getID3()检测)
  • Ahead Nero编码的TwinVQF文件比应有的时间短1秒
  • AAC-ADTS文件始终实际上是VBR,即使指定了CBR模式(CBR模式的开关在编码器中启用ABR模式,而不是CBR,但无法区分此类ABR文件和真正的VBR)
  • OggFLAC中的STREAMINFO.audio_signature始终为null。"之所以如此,是因为libOggFLAC还没有寻址支持,因此它没有在编码后返回并写入计算总和的方法。Ogg FLAC中的寻址支持是下一个版本的首要任务。" - Josh Coalson(FLAC开发者)注意:getID3()将以类似于其他文件格式的方法计算md5_data,但该值不能与FLAC文件格式中的FLAC数据中的md5_data值进行比较。
  • FLAC v0.3.0 & v0.4.0中没有计算STREAMINFO.audio_signature - getID3()将以类似于其他文件格式的方法计算md5_data,但该值不能与FLAC v0.5.0+中的md5_data值进行比较
  • RioPort(包括2.0和3.11在内的各种版本)使用没有数据部分的WCOM框架标记ID3v2
  • Coolplayer的早期版本向Ogg Vorbis文件添加了非法的ID3标签,从而导致文件损坏。
  • Meracl ID3 Tag Writer v1.3.4(及更早版本)在附加新的ID3v1标签时,错误地截断了MP3文件数据的最后一个字节。(由getID3()检测)
  • 使用和/或-noseek开关编码的Lossless-Audio文件在内部实际上确实不同,因此无法匹配md5_data
  • iTunes已知会在ID3v2标签也存在的时,在现有的ID3v1标签末尾附加一个新的ID3v1标签(由getID3()检测)
  • MediaMonkey可能会写入一个空的RGAD ID3v2框架,但将实际的重放增益调整放在一系列用户定义的TXXX框架中(自v1.9.2以来由getID3()检测和处理)

参考资料

[www.id3.org材料现在在http://id3lib.sourceforge.net/id3/中镜像]