buonzz / scalp
命令行工具,用于分析和存储媒体文件的元数据
Requires
- php: >=5.4
- cwhite92/b2-sdk-php: ^1.2
- guzzlehttp/guzzle: ^6.2
- james-heinrich/getid3: 1.9.*
- masterexploder/phpthumb: ^2.1
- monolog/monolog: ^1.19
- symfony/console: ^3.0
- symfony/stopwatch: ^3.0
- vlucas/phpdotenv: ^2.2
Requires (Dev)
- phpunit/phpunit: 5.2.*
README
命令行工具,用于分析和存储媒体文件的元数据。
你或你的组织是否有一堆图片/视频堆放在某个硬盘上?如果这些文件以非结构化的方式存储,比如没有真正的组织结构(按日期、按相册等),那么进行分析和检索一组文件将非常困难。
Scalp 允许您从这些媒体文件中分析和提取大量信息,并从中构建“某些东西”。它是一个纯后端工具,旨在支持您可能在该提取信息之上开发的任何类型的应用程序。
以下是一些可能有用的情况
- 构建一个私有搜索引擎,允许用户输入特定关键字并返回匹配该关键字的文件列表
- 用作 CMS 的后端存储
- 生成缩略图(小/中/大)并将处理后的文件托管到 CDN
以下是 Scalp 的工作概述
- 您的媒体文件可以存储在同一服务器或专用的 NAS 服务器上(需要将其挂载到 Scalp 可以访问的位置)
- Scalp 读取文件并从中提取元数据(表示为 JSON 对象)
- Scalp 生成缩略图(小/中/大)
- 处理后的数据可以转发到任何支持的后端存储(文件、ElasticSearch、S3、BackBlaze 等)
- 您的应用程序通过这些后端存储访问处理后的数据
优点
- 您可以在不实际移动文件的情况下不断重新组织文件以供用户查看。因为表示可以由应用程序本身抽象化
- 您的原始图像/视频保持不变(Scalp 永远不会移动、调整大小或修改其属性)
- 节省大量带宽,因为您不需要在浏览项目时提供原始图像。您只需使用 Scalp 创建的缩略图,并且只有当用户请求时才访问原始(通常很大的)图像文件。
要求
- 基于 Linux 的服务器(Debian/RHEL 等)
- PHP 5.4 或更高版本
安装
将 Scalp 作为 CLI 工具安装非常简单
通过 wget
wget https://downloads.buonzz.com/scalp.phar
sudo mv scalp.phar /usr/local/bin/scalp
chmod +x /usr/local/bin/scalp
通过 curl
curl -o scalp.phar 'https://downloads.buonzz.com/scalp.phar'
sudo mv scalp.phar /usr/local/bin/scalp
chmod +x /usr/local/bin/scalp
之后,scalp 命令在您的计算机的任何位置都可用。要检查 Scalp 是否安装正确,只需执行
scalp -V
这将输出
Scalp Metadata Extraction Tool by Darwin Biler version v2
通过 Composer - 全局
您可以在您的机器上全局安装 scalp
composer global require 'buonzz/scalp=dev-master'
只需将此目录添加到您的 ~/.bash_profile(或 ~/.bashrc)中的 PATH,如下所示
export PATH=~/.composer/vendor/bin:$PATH
通过 Composer - 每个项目
只需在您的 composer 项目中引入 buonzz/scalp 即可
{
"require":{
"buonzz/scalp": "1.*"
}
}
用法
Scalp 可以从您的媒体文件中提取元数据信息并将其导出到以下内容
- 静态 JSON 文件
- 缩略图
首先,您需要创建一个名为 .env 的配置文件。这将用于 Scalp 获取某些信息
元数据提取
要生成静态 JSON 文件
scalp metadata:extract
示例提取的元数据
{
"last_modified":"2017-03-25T12:10:39+00:00",
"last_accessed":"2017-04-09T12:07:11+00:00",
"file_permissions":"0644",
"date_indexed":"2017-04-10T03:04:23+00:00",
"human_filesize":"974.83 kB",
"filepath":"IMG_1123.JPG",
"path_tags":[
],
"filesize":"998225",
"fileformat":"jpg",
"filename":"IMG_1123.JPG",
"mime_type":"image\/jpeg",
"exif":{
"DateTimeDigitized":"2016-05-17T16:19:26+00:00",
"ExposureTime":0.016666666666667,
"FNumber":4,
"ISOSpeedRatings":200,
"ShutterSpeedValue":6,
"ApertureValue":4,
"FocalLength":20
},
"date_tags":[
"Tue",
"17th",
"Tuesday",
"May",
"May",
"2016",
"4pm",
"UTC",
"17"
],
"file_contents_hash":"4c7e796bc250b14fe7964694c4db5852eca34ddee24991371f848c3e8097436d",
"width":"1920",
"height":"1280"
}
缩略图创建
scalp thumbnail:create
在后台运行
如果您有一个相对较大的媒体文件集合,这个过程可能需要数小时才能完成。您可以将其放在后台,这样即使您在终端中注销,它也会继续执行。
nohup scalp metadata:extract > scalp.log &
nohup scalp thumbnail:create > scalp.log &
后端存储
处理后的数据可以以多种方式存储。这使您可以自由地使用其数据,以满足您的用例。
文件
最简单的后端是文件存储。它只是将所有内容简单地存放到你在 .env 文件中定义的 OUTPUT_FOLDER 配置中。你可以使用生成的文件并在你的 web 服务器/CDN 上托管,或者将其传递给应用程序进行进一步处理。
ElasticSearch
当使用 ElasticSearch 作为后端时,请确保在你的 .env 文件中提供以下条目
加载到 ElasticSearch
scalp es:index
将缩略图保存到 ElasticSearch
scalp thumb:save
查看缩略图
你可以使用 PHP 内置的 web 服务器预览这些缩略图
php -S localhost:8080 /usr/local/bin/scalp
然后在本地主机上,只需在搜索命令给出的 URL 后面添加。
BackBlaze 的 B2 云存储
B2 是存储元数据和缩略图的好方法,如果你计划在流量大的网站上提供这些数据。它比其他替代方案便宜得多,并且它为你提供免费的 10GB 初始存储空间,所以除非你决定上传更多内容,否则你实际上不需要支付任何费用。
在使用 BackBlaze 之前,在 .env 文件中提供以下条目
然后执行以下操作以提取、创建缩略图并将数据上传到 B2
scalp b2:upload scalp-test dist
第一个参数(scalp-test)是在你的 BackBlaze 账户中创建的存储桶名称,第二个参数是待上传文件所在的文件夹。
AWS S3
待办事项