delphi 怎么监测image有没有变动_照片怎么命名比较好?我们一起搞定它!

大家小时候学写作文的时候都知道,写清楚时间地点人物干什么很重要。那么一张照片中,时间和地点都能体现在Exif信息中,人物和干什么需要自己去看照片了。

如果自己不想依靠第三方照片管理程序管理照片,只是单纯依靠目录名称和照片名称,那么起一个好目录名很重要。你可以将同样类似的照片放在这个目录下。但是,即使在相同目录下面,照片的命名也是非常重要的。照片拍摄的时间,以及用什么设备拍摄,是两个最重要的信息,因此我们这一次整理文件时,将这两个信息体现在文件名中。

接下来我们一起来整理。


一般从iPhone中拷贝出来的照片,是下面这样子:

9053ca9e4a68491e39e7f5ae2b65c8e1.png

目录里面呢?是下面这样子。

cdee6553bfa9c7924ea1181b599d0df5.png

看起来很通用常见的相机命名方式。

之前我使用一些软件来整理照片,比如有一个软件叫做NAMEXIF:

418f081e7b8ba3b214541ae0651d7d12.png
https://www.digicamsoft.com/softnamexif.html​www.digicamsoft.com

很可惜,这个软件有稳定性问题,整理的时候有时候会提示错误,崩溃。另外不支持HEIC格式!

然后我转向Total Commander。TC长得下面这个样子...

3ab9367c252753d20cdd6f995b06467b.png

Multi-Rename Tool里面可以通过exif插件读取照片的exif信息,轻松将照片进行改名!

f285c23ee586b45e44493fe46f64c6b1.png

但是同样,这个插件也不支持HEIC格式的照片!

谷歌一下关键字[total commander exif plugin heic],结果如下:

fbfd03d285641fb7deb7c52593a5e2a2.png

看起来希望支持HEIC是不太可能。

好吧,接下来有如下的几个可能性:

  1. 将HEIC转换成JPG后再处理(那我还不如让iPhone直接输出JPG得了)
  2. 再去找一下其他支持HEIC改名的软件(之前已经花了好多时间测试很多软件,都不是很靠普)
  3. 等待我使用的NAMEXIF或者TC的Plugin更新(要到猴年马月?)

上面三个选项都是我不愿意选!就是一个重命名嘛,获取一下照片的EXIF信息,然后改一下文件名而已,和大象塞进去冰箱一样,步骤这么简单,怎么就这么困难呢?


自己动手,丰衣足食!这一次我们自己用脚本解决这个问题。

要改名字,第一步就是获取EXIF信息!而我们这一次的困难就是苹果的HEIC个格式太新。谷歌一下HEIC的EXIF信息怎么读取。关键字[heic exif read command line]

查询结果第一个就是 ExifTool by Phil Harvey

beece08e00a8cbd61f8ff4805394fc47.png

看一下支持的格式,各种各样!发现支持HEIC!---> 哈哈哈,好开心。

然后看一下我们的FreeBSD上有没有现成的软件包:

root@nas:~ # pkg search exiftool
p5-Image-ExifTool-11.01        Perl module for getting EXIF data from image files
p5-Image-ExifTool-devel-10.66  Perl module for getting EXIF data from image files

很好,我们马上装一个!

root@nas:~ # pkg install p5-Image-ExifTool
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	p5-Image-ExifTool: 11.01

Number of packages to be installed: 1

The process will require 19 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching p5-Image-ExifTool-11.01.txz: 100%    3 MiB 797.1kB/s    00:04    
Checking integrity... done (0 conflicting)
[1/1] Installing p5-Image-ExifTool-11.01...
[1/1] Extracting p5-Image-ExifTool-11.01: 100%

注意一下,软件包的名称叫做[p5-Image-ExifTool],但是命令行是[exiftool]。

有了工具,我们试着读取一下照片看看先。

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC 
ExifTool Version Number         : 11.01
File Name                       : IMG_2090.HEIC
Directory                       : .
File Size                       : 1853 kB
File Modification Date/Time     : 2019:09:08 20:20:03+09:00
File Access Date/Time           : 2019:09:08 20:20:02+09:00
File Inode Change Date/Time     : 2019:09:08 20:20:03+09:00
File Permissions                : rwxr--r--
File Type                       : HEIC
File Type Extension             : heic
MIME Type                       : image/heic
Major Brand                     : High Efficiency Image Format HEVC still image (.HEIC)
Minor Version                   : 0.0.0
Compatible Brands               : mif1, heic
Handler Type                    : Picture
Primary Item Reference          : 49
Exif Byte Order                 : Big-endian (Motorola, MM)
Make                            : Apple
Camera Model Name               : iPhone 8 Plus
Orientation                     : Rotate 90 CW
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches
Software                        : 12.1.4
Modify Date                     : 2019:02:22 19:03:11
Y Cb Cr Positioning             : Centered
Exposure Time                   : 1/17
F Number                        : 1.8
Exposure Program                : Program AE
ISO                             : 80
Exif Version                    : 0221
Date/Time Original              : 2019:02:22 19:03:11
Create Date                     : 2019:02:22 19:03:11
Components Configuration        : Y, Cb, Cr, -
Shutter Speed Value             : 1/17
Aperture Value                  : 1.8
Brightness Value                : 1.320801383
Exposure Compensation           : 0
Metering Mode                   : Spot
Flash                           : Auto, Did not fire
Focal Length                    : 4.0 mm
Subject Area                    : 2150 1886 753 756
Run Time Flags                  : Valid
Run Time Value                  : 168858604545083
Run Time Scale                  : 1000000000
Run Time Epoch                  : 0
Acceleration Vector             : 0.002557792702 -1.001891971 0.01366691477
Sub Sec Time Original           : 756
Sub Sec Time Digitized          : 756
Flashpix Version                : 0100
Color Space                     : Uncalibrated
Exif Image Width                : 4032
Exif Image Height               : 3024
Sensing Method                  : One-chip color area
Scene Type                      : Directly photographed
Exposure Mode                   : Auto
White Balance                   : Auto
Focal Length In 35mm Format     : 28 mm
Scene Capture Type              : Standard
Lens Info                       : 3.99-6.6mm f/1.8-2.8
Lens Make                       : Apple
Lens Model                      : iPhone 8 Plus back dual camera 3.99mm f/1.8
GPS Latitude Ref                : North
GPS Longitude Ref               : East
GPS Altitude Ref                : Above Sea Level
GPS Time Stamp                  : 10:03:11
GPS Speed Ref                   : km/h
GPS Speed                       : 0.36
GPS Img Direction Ref           : True North
GPS Img Direction               : 33.96113968
GPS Dest Bearing Ref            : True North
GPS Dest Bearing                : 33.96113968
GPS Date Stamp                  : 2019:02:22
GPS Horizontal Positioning Error: 25 m
Image Width                     : 4032
Image Height                    : 3024
Image Spatial Extent            : 4032x3024
Rotation                        : 270
Profile CMM Type                : Apple Computer Inc.
Profile Version                 : 4.0.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 2017:07:07 13:22:32
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : Apple Computer Inc.
Device Model                    : 
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : Apple Computer Inc.
Profile ID                      : ca1a9582257f104d389913d5d1ea1582
Profile Description             : Display P3
Profile Copyright               : Copyright Apple Inc., 2017
Media White Point               : 0.95045 1 1.08905
Red Matrix Column               : 0.51512 0.2412 -0.00105
Green Matrix Column             : 0.29198 0.69225 0.04189
Blue Matrix Column              : 0.1571 0.06657 0.78407
Red Tone Reproduction Curve     : (Binary data 32 bytes, use -b option to extract)
Chromatic Adaptation            : 1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168
Blue Tone Reproduction Curve    : (Binary data 32 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 32 bytes, use -b option to extract)
Image Pixel Depth               : 8 8 8
Movie Data Size                 : 1893342
Movie Data Offset               : 3995
Aperture                        : 1.8
GPS Altitude                    : 37.2 m Above Sea Level
GPS Date/Time                   : 2019:02:22 10:03:11Z
GPS Latitude                    : 
GPS Longitude                   : 
GPS Position                    : 
Image Size                      : 4032x3024
Megapixels                      : 12.2
Run Time Since Power Up         : 1 days 22:54:18
Scale Factor To 35 mm Equivalent: 7.0
Shutter Speed                   : 1/17
Create Date                     : 2019:02:22 19:03:11.756
Date/Time Original              : 2019:02:22 19:03:11.756
Circle Of Confusion             : 0.004 mm
Field Of View                   : 65.5 deg
Focal Length                    : 4.0 mm (35 mm equivalent: 28.0 mm)
Hyperfocal Distance             : 2.07 m
Light Value                     : 6.1

EXIF中的各种信息都显示出来了!其实我们改名所需要的就要两行信息:

Camera Model Name               : iPhone 8 Plus
Create Date                     : 2019:02:22 19:03:11.756

因为我们想命名的格式如下[Camera Name]_[Taken Date].[Ext],比如

iPhone 8 Plus_20180929 130108.356.HEIC

接下来,需要你熟悉几个Unix程序就行。

其中一个是grep,是一个最初用于Unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配的行或文本。

比如我们需要提取拍照设备名称,那么命令行如下:

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep Model
Camera Model Name               : iPhone 8 Plus
Lens Model                      : iPhone 8 Plus back dual camera 3.99mm f/1.8
Device Model                    : 

结果输出了三行,我们只需要第一行即可,所以用head这个命令提取第一行:

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep Model | head -n 1
Camera Model Name               : iPhone 8 Plus

然后我们发现,我们需要的信息在冒号之后,我们用awk来提取一下冒号右边的部分

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep Model | head -n 1 | awk -F":" '{print $2}'
 iPhone 8 Plus

结果字符串的前面有一个空格,我们将分隔符从冒号改成冒号+空格

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep Model | head -n 1 | awk -F": " '{print $2}'
iPhone 8 Plus

拿到我们需要的设备名称了,已经迈开了一大步!

接下来提取照片拍摄日期,同样,命令行如下:

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep -e Create | tail -n 1 | awk -F": " '{print $2}' 
2019:02:22 19:03:11.756

注意到结果包含了冒号,而Windows中,文件名称中有冒号的话,会显示其他文件名,所以我们用tr个命令将冒号去掉。

root@nas:/home/qianhu/112APPLE # exiftool IMG_2090.HEIC | grep -e Create | tail -n 1 | awk -F": " '{print $2}' | tr -d ":"
20190222 190311.756

接下来只需要考虑一些额外的异常情况就把脚本搞定了。

我们最终的脚本如下:

#!/bin/sh

if [ -z "$1" ]
  then
    echo "No argument supplied"
  exit 1
fi

FROM=$1

echo "Processing ${FROM}..."

EXT="${FROM##*.}"
DEVICE=`exiftool "$FROM" | grep -e Model | head -n 1 | awk -F": " '{print $2}'`
DATE=`exiftool "$FROM" | grep -e Create | tail -n 1 | awk -F": " '{print $2}' | tr -d ":" `

echo "Taken by ${DEVICE}..."
echo "Taken at ${DATE}..."

[ -z "${DATE}" ] && exit 0

if [ -z "${DEVICE}" ]; then
   TO="${DATE}.${EXT}"
else
   TO="${DEVICE}_${DATE}.${EXT}"
fi

echo "Origin File Name ${FROM}"
echo "Change to ${TO}"

[ "${FROM}" == "${TO}" ] && exit 0

CNT=0
while [ -e "$TO" ]; do
  let CNT=CNT+1 
  TO="${DEVICE}_${DATE}_${CNT}.${EXT}"
done

echo "Rename ${FROM} to ${TO}..."

mv "${FROM}" "${TO}"

这个脚本看起来复杂些,不过还是比较好懂得。脚本考虑了一些异常场景,比如

  • 脚本没有参数时的处理(直接提示之后退出)
  • EXIF中没有日期信息时的处理(不进行改名)
  • EXIF中没有设备信息时的处理(文件名中不加上设备名称)
  • 文件名已经是整理过的情况。(已经是我们需要的文件名,不需要再次更改)
  • 想要更改的文件名中,文件已经存在时的处理(文件名再加一个计数后缀)

接下来我们跑一个看看。

root@nas:/home/qianhu/112APPLE # /root/bin/exifmv.sh IMG_2090.HEIC 
Processing IMG_2090.HEIC...
Taken by iPhone 8 Plus...
Taken at 20190222 190311.756...
Origin File Name IMG_2090.HEIC
Change to iPhone 8 Plus_20190222 190311.756.HEIC
Rename IMG_2090.HEIC to iPhone 8 Plus_20190222 190311.756.HEIC...

搞定!我们已经将[IMG_2090.HEIC]改名成[iPhone 8 Plus_20190222 190311.756.HEIC]。

接下来,我们就是重复利用上面的命令,将文件一个个进行改名。用脚本很容易搞定:

# for f in *; do /root/bin/exifmv.sh "$f"; done
Processing DPAH7306.AAE...
Taken by ...
Taken at ...
Processing DPAH7306.JPG...
Taken by ...
Taken at ...
Processing DPAHE7306.JPG...
Taken by ...
Taken at ...
Processing FELH8126.JPG...
Taken by iPhone 8 Plus...
Taken at 20190404 135538.403...
Origin File Name FELH8126.JPG
Change to iPhone 8 Plus_20190404 135538.403.JPG
Rename FELH8126.JPG to iPhone 8 Plus_20190404 135538.403.JPG...
Processing IMG_0085.JPEG...
Taken by iPhone XR...
Taken at 20190406 141207.917...
Origin File Name IMG_0085.JPEG
Change to iPhone XR_20190406 141207.917.JPEG
Rename IMG_0085.JPEG to iPhone XR_20190406 141207.917.JPEG...
Processing IMG_0085.MOV...
Taken by iPhone XR...
Taken at 20190406 073405...
Origin File Name IMG_0085.MOV
Change to iPhone XR_20190406 073405.MOV
Rename IMG_0085.MOV to iPhone XR_20190406 073405.MOV...
Processing IMG_1938 (1).JPEG...
Taken by ...
Taken at ...
Processing IMG_1938 (2).MOV...
Taken by iPhone X...
Taken at 20190322 012245...
Origin File Name IMG_1938 (2).MOV
Change to iPhone X_20190322 012245.MOV
Rename IMG_1938 (2).MOV to iPhone X_20190322 012245.MOV...
Processing IMG_1938.JPEG...

看到文件一个一个改名成功了.... ;-)


接下来就是彩蛋了,之前我的文章中提到可以利用xargs的多线程进行HEIC格式的转换加速,这一次我们也可以这么做,命令如下:

ls * | xargs -P 100 -I PIC ~/bin/exifmv.sh PIC

可以同时转换100个文件!

目录里面2000多个文件,只需要1分钟不到就搞定了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值