锡林郭勒盟网站建设_网站建设公司_代码压缩_seo优化
2025/12/19 15:17:25 网站建设 项目流程

在 macOS 命令行下,查看照片(图片)的拍摄时间、方向、分辨率等元数据,工程上结论非常明确:

首选工具:exiftool
这是业界事实标准,准确、全面、可脚本化。

下面按推荐程度 + 实用性给你完整说明。


一、首选方案(强烈推荐):exiftool

1️⃣ 安装

brew install exiftool

2️⃣ 查看一张照片的完整信息

exiftool photo.jpg

你会看到非常全面的输出,包括:

  • 拍摄时间
  • 方向(Orientation)
  • 分辨率
  • 相机 / 手机型号
  • GPS(如果有)
  • EXIF / XMP / IPTC 信息

二、你关心的几个关键字段(重点)

1️⃣ 拍摄时间(最重要)

exiftool -DateTimeOriginal photo.jpg

常见字段含义:

字段 说明
DateTimeOriginal 真实拍摄时间(最可靠)
CreateDate 创建时间
ModifyDate 修改时间

👉 工程上优先用 DateTimeOriginal


2️⃣ 照片方向(是否需要旋转)

exiftool -Orientation photo.jpg

典型输出:

Orientation : Rotate 90 CW

常见取值:

Orientation 含义
Horizontal (normal) 正常
Rotate 90 CW 需要顺时针旋转
Rotate 180 旋转 180°
Rotate 270 CW 逆时针 90°

3️⃣ 分辨率 / 尺寸

exiftool -ImageWidth -ImageHeight photo.jpg

输出示例:

Image Width  : 4032
Image Height : 3024

4️⃣ 一次性输出你最关心的字段(推荐)

exiftool \-DateTimeOriginal \-Orientation \-ImageWidth \-ImageHeight \photo.jpg

三、批量查看(你很可能会用到)

1️⃣ 当前目录下所有 JPG / PNG

exiftool -DateTimeOriginal -Orientation -ImageWidth -ImageHeight *.jpg

2️⃣ 输出为“单行,便于脚本处理”

exiftool -s -s -s \-DateTimeOriginal \-Orientation \-ImageWidth \-ImageHeight \photo.jpg

输出:

2023:09:18 14:32:10
Rotate 90 CW
4032
3024

3️⃣ 输出为 CSV(工程化强烈推荐)

exiftool -csv \-FileName \-DateTimeOriginal \-Orientation \-ImageWidth \-ImageHeight \*.jpg

四、macOS 自带工具(不推荐做主方案)

⚠️ mdls(精度与字段不稳定)

mdls photo.jpg
  • 依赖 Spotlight
  • EXIF 字段不完整
  • 不适合工程校验

⚠️ sips(只适合基础信息)

sips -g creation photo.jpg
sips -g pixelWidth -g pixelHeight photo.jpg

缺点:

  • 拍摄时间经常拿不到
  • 不支持完整 EXIF

五、如果你在做“工程级照片处理”,这些点要注意

结合你之前的使用场景(Android 端照片迁移 / 校验 / 同步),我给你几个关键建议:

✅ 拍摄时间优先级

DateTimeOriginal > CreateDate > 文件时间

✅ 方向一定要读 EXIF

  • Android / iOS 拍照 大量依赖 Orientation
  • 不读 Orientation,显示一定出问题

✅ Android 端字段对齐

macOS / exiftool Android
DateTimeOriginal ExifInterface.TAG_DATETIME_ORIGINAL
Orientation ExifInterface.TAG_ORIENTATION
ImageWidth TAG_IMAGE_WIDTH
ImageHeight TAG_IMAGE_LENGTH

在 macOS 上,要精确获取视频时长到毫秒(ms)级别,结论很明确:

最准确、最通用、工程上可接受的方案是:ffprobe(FFmpeg)

下面按准确性、可用性、工程实践给你完整说明。


一、首选方案(强烈推荐):ffprobe

1️⃣ 安装(只需一次)

brew install ffmpeg

2️⃣ 获取“精确到毫秒”的视频时长

ffprobe -v error \-show_entries format=duration \-of default=noprint_wrappers=1:nokey=1 \input.mp4

输出示例:

12.345678

单位:秒(浮点数)


3️⃣ 转换为毫秒(ms)

ffprobe -v error -show_entries format=duration \-of default=noprint_wrappers=1:nokey=1 \input.mp4 | awk '{ printf "%.0f\n", $1 * 1000 }'

输出示例:

12346

这是工程上最常用的写法。


二、为什么 ffprobe 是“准确”的?

它读取的是:

  • 容器级 duration(不是估算)
  • 时间基(time_base)
  • 帧时间戳(PTS/DTS)

尤其适合:

  • MP4 / MKV / MOV
  • H.264 / H.265
  • VFR(可变帧率)视频

准确度远高于 Finder / QuickTime / shell 内建工具


三、如果你要“逐帧级别”的极致准确(可选)

基于帧时间戳统计(极端严谨)

ffprobe -v error \-select_streams v:0 \-show_entries frame=pts_time \-of csv=p=0 \input.mp4 | tail -n 1
  • 取最后一帧的 pts_time
  • 理论上是播放时间轴的真实终点

⚠️ 缺点:

  • 对超长视频不友好

四、其他工具对比(不推荐为主方案)

mdls(macOS 自带)

mdls input.mp4 | grep kMDItemDurationSeconds

问题:

  • 精度不稳定
  • 常被四舍五入
  • 不适合工程用途

⚠️ mediainfo

brew install mediainfo
mediainfo --Output=JSON input.mp4
  • 精度还可以
  • 但在某些 MP4 / fragmented MP4 上会有偏差
  • 不如 ffprobe 权威

五、推荐你直接用的“工程级函数”

Bash 函数版(可直接放脚本)

video_duration_ms() {ffprobe -v error -show_entries format=duration \-of default=noprint_wrappers=1:nokey=1 "$1" \| awk '{ printf "%.0f\n", $1 * 1000 }'
}

使用:

video_duration_ms test.mp4

六、一句工程结论

在 macOS 命令行环境下,ffprobe 是唯一同时满足:

  • ms 级精度
  • 格式通用
  • 行为稳定
  • 工程可复现

的方案。

如果你接下来是要把这个结果用于 Android 端校验 / 视频同步 / 时间戳对齐 / 传输完整性判断,我也可以直接帮你对齐一套「mac → Android」一致的时间模型。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询