PHP 使用 getID3 来获取音频、视频的播放时长等媒体文件相关信息

起因
最近在家办公中,碰到需要处理一些视频文件的操作,公司一直使用的某云存储,处理图片的接口倒是挺多,但是视频类的一些处理就需要开通另外的服务了,捣鼓了一圈子还是决定自己处理给公司省点钱吧。

PHP 在本地处理视频等媒体文件的时候一般都是借助了 『ffmpeg』,但是代码有点太老,扩展安装又出了幺蛾子,搞了一下午好累。

后面发现还有 getID3 也可以用来处理相关媒体文件信息,这是一个 PHP 脚本,只需要简单引入项目即可,不需要安装额外的扩展或者工具。但是问题又来了,国外的下载速度死慢,1.4M 的东西下载了 1 个多小时哭死我。

下载

getID3 官方地址:https://www.getid3.org

Github 下载地址: https://github.com/JamesHeinrich/getID3/archive/master.zip

SourceForge 下载地址:https://sourceforge.net/projects/getid3/

腾讯云下载地址: https://reggie-1258048181.cos.ap-guangzhou.myqcloud.com/web/getID3-master.zip

备用下载地址:https://www.tokme.cn/images/web/getID3-master.zip

使用

因为这不是一个标准的符合 PSR-4 规范的包(没有命名空间,类名也不咋地没细看),如果在项目要使用的话直接添加整个getid3文件夹,然后引入 getid3/getid3.php 即可。如果是在thinkPHP5.1 中可以这样引入。
解压文件,把getid3文件夹放到项目下,我是放到了 extend下(包里有很多无用的文件都可以删除)
最后在需要使用的地方引入即可

/**引入类库*/
require "../extend/getid3/getid3.php";

下面四demo

 // 方法1
 $getID3 = new \getID3();
 $analyzeFileInfo = $getID3->analyze($filepath['filePath']);
 halt($analyzeFileInfo );
 $fileduration = $analyzeFileInfo['playtime_seconds']; //这个获得的便是音频文件的时长
 $time = (int)ceil($fileduration);

里面会有很多的属性,看自己的需要来取吧。比如其中的 playtime_seconds 就是媒体的时长。
halt($analyzeFileInfo );打印的内容

"data": {
		"GETID3_VERSION": "1.9.19-202002221838",
		"filesize": 2574957,
		"filepath": "D:/phpstudy_pro/WWW/mjgf-app/public/uploads/app/audioFile/20210611",
		"filename": "5eb484aff854abd8412e0737112bc067.mp3",
		"filenamepath": "D:/phpstudy_pro/WWW/mjgf-app/public/uploads/app/audioFile/20210611/5eb484aff854abd8412e0737112bc067.mp3",
		"avdataoffset": 45,
		"avdataend": 2574957,
		"fileformat": "mp3",
		"audio": {
			"dataformat": "mp3",
			"channels": 1,
			"sample_rate": 48000,
			"bitrate": 64000,
			"channelmode": "mono",
			"bitrate_mode": "cbr",
			"lossless": false,
			"encoder_options": "CBR64",
			"compression_ratio": 0.08333333333333333,
			"streams": [
				{
					"dataformat": "mp3",
					"channels": 1,
					"sample_rate": 48000,
					"bitrate": 64000,
					"channelmode": "mono",
					"bitrate_mode": "cbr",
					"lossless": false,
					"encoder_options": "CBR64",
					"compression_ratio": 0.08333333333333333
				}
			]
		},
		"tags": {
			"id3v2": {
				"encoder_settings": [
					"Lavf57.41.100"
				]
			}
		},
		"encoding": "UTF-8",
		"id3v2": {
			"header": true,
			"flags": {
				"unsynch": false,
				"exthead": false,
				"experim": false,
				"isfooter": false
			},
			"majorversion": 4,
			"minorversion": 0,
			"headerlength": 45,
			"tag_offset_start": 0,
			"tag_offset_end": 45,
			"encoding": "UTF-8",
			"comments": {
				"encoder_settings": [
					"Lavf57.41.100"
				]
			},
			"TSSE": [
				{
					"frame_name": "TSSE",
					"frame_flags_raw": 0,
					"data": "Lavf57.41.100",
					"datalength": 15,
					"dataoffset": 10,
					"framenamelong": "Software/Hardware and settings used for encoding",
					"framenameshort": "encoder_settings",
					"flags": {
						"TagAlterPreservation": false,
						"FileAlterPreservation": false,
						"ReadOnly": false,
						"GroupingIdentity": false,
						"compression": false,
						"Encryption": false,
						"Unsynchronisation": false,
						"DataLengthIndicator": false
					},
					"encodingid": 3,
					"encoding": "UTF-8"
				}
			],
			"padding": {
				"start": 35,
				"length": 10,
				"valid": true
			}
		},
		"mime_type": "audio/mpeg",
		"mpeg": {
			"audio": {
				"raw": {
					"synch": 4094,
					"version": 3,
					"layer": 1,
					"protection": 1,
					"bitrate": 5,
					"sample_rate": 1,
					"padding": 0,
					"private": 0,
					"channelmode": 3,
					"modeextension": 0,
					"copyright": 0,
					"original": 1,
					"emphasis": 0
				},
				"version": "1",
				"layer": 3,
				"channelmode": "mono",
				"channels": 1,
				"sample_rate": 48000,
				"protection": false,
				"private": false,
				"modeextension": "",
				"copyright": false,
				"original": true,
				"emphasis": "none",
				"padding": false,
				"bitrate": 64000,
				"framelength": 192,
				"bitrate_mode": "cbr"
			}
		},
		"playtime_seconds": 321.864,
		"tags_html": {
			"id3v2": {
				"encoder_settings": [
					"Lavf57.41.100"
				]
			}
		},
		"bitrate": 64000,
		"playtime_string": "5:22"
	}

补充:

getID3()这个PHP脚本能够从MP3或其它媒体文件中提取有用的信息如:ID3标签,bitrate,播放时间等。

(格式包括:Ogg,WMA,WMV,ASF,WAV,AVI,AAC,VQF,FLAC,MusePack,Real,QuickTime,Monkey’s Audio,MIDI等)。

官方网址:https://www.getid3.org/
功能:

使用这个方法,可以获得音频、视频、图片等媒体文件中的信息,

我测了一下常见类型的媒体文件,测试结果如下:

使用的getID3的版本是:1.9.16-201810171314。

支持的类型:
音频:【mp3】、【amr】;
视频:【mp4】、【flv】、【wmv】、【avi】;
图片:【gif】、【png】、【jpg】。

不支持的类型:

视频格式【ts】。

示例:
使用背景:做聊天功能时,发送语音时,需要知道语音的时长,这个时候就可以使用getID3这个类。

开发环境:ThinkPHP5.1框架。

下载getID3类:在官网下载后解压,里边有许多文件,很多都是demo,只需要将getid3目录放到项目里,
我把目录放到extend下。

调用示例代码:

require "../extend/getid3/getid3.php";
$getID3 = new \getID3();
$analyzeFileInfo = $getID3->analyze($filename);
if($analyzeFileInfo && is_array($analyzeFileInfo)){
      if(isset($analyzeFileInfo['error']) && $analyzeFileInfo['error']){
               $err_msg = '获取语音消息的时长失败';
                    if(is_array($analyzeFileInfo['error'])){
                        foreach ($analyzeFileInfo['error'] as $key=>$value) {
                            $err_msg .= ',错误'. ($key+1) . ':'.$value;
                        }
                    }else{
                        $err_msg .= ',错误:'.$analyzeFileInfo['error'];
                    }
                    log($err_msg);
                    return false;
                }else{
                    if(isset($analyzeFileInfo['playtime_seconds'])){
                        return ceil($analyzeFileInfo['playtime_seconds']);
                    }
                    return false;
                }
            }else{
                log('解析语音文件失败:'.$analyzeFileInfo);
                return false;
            }
        }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值