使用 ExifTool 为照片批量添加和复制 GPS 信息
在日常摄影中,我们常常会遇到这样一个问题:使用相机(如 Nikon Z30 等非 GPS 相机)拍摄的照片并没有记录位置信息。如果你希望在后期整理或分享时,让照片具备地理信息,就需要借助专业工具来补充或批量写入 GPS 数据。
本文将介绍如何使用强大的命令行工具 ExifTool 来解决这个问题,包括:
1. 为照片添加 GPS 信息;
2. 将一张照片的 GPS 信息复制到另一张或多张照片中;
3. 检查和验证修改结果。
什么是 ExifTool?
ExifTool 是一款非常强大的命令行工具,可以读取、写入和编辑图片、音视频等文件的元数据(Metadata)。它支持几乎所有的照片格式,包括 JPEG、PNG,以及各大相机品牌的 RAW 格式(NEF、CR2、ARW 等)。
⸻
用 ExifTool 安全地把一张照片的 GPS 信息复制到其它照片(NEF/RAW)——完整实操指南
参考:ExifTool 官方文档 https://exiftool.org/
本文将结论先行:ExifTool 支持直接往 RAW 文件(包括 NEF)写 GPS 信息,并提供默认的 _original 文件自动备份。
⸻
📝 概览(结论先行)
• ExifTool 能够直接写入 RAW(NEF、CR2、ARW 等),GPS 信息可以和 EXIF、XMP 一起保存。
• macOS 上推荐用 Homebrew 安装,也可从 exiftool.org 下载 .pkg。
• 操作建议:先备份 → 先验证 → 小规模试运行 → 再批量处理。
⸻
1)准备工作(安装 + 备份)
安装 ExifTool
推荐 Homebrew 安装:
brew install exiftool
或直接下载 Mac 安装包:https://exiftool.org/
验证安装:
exiftool -ver
备份
虽然 ExifTool 默认会保留 _original 文件(参考官方 Backups 说明),但强烈建议在大规模操作前完整复制目录。
⸻
2)读取并验证源文件 GPS 标签
在写入前先确认源文件 GPS 信息存在哪些 group:
显示所有 GPS 相关字段,含组名
exiftool -a -G1 -s -gps* source_with_gps.nef
只看 EXIF GPS
exiftool -gps:all source_with_gps.nef
• -a:显示重复标签
• -G1:显示标签组(EXIF、XMP 等)
• -s:显示原始标签名
(参见官方 Tag Groups 文档)
⸻
3)单张复制 GPS 信息
把源文件的 GPS 信息复制到目标文件:
exiftool -tagsFromFile source_with_gps.nef -gps:all target_without_gps.nef
• 默认会生成 target_without_gps.nef_original(安全备份)。
如果你已确认无误且不需要 _original:
exiftool -P -overwrite_original_in_place
-tagsFromFile source_with_gps.nef -gps:all target_without_gps.nef
• -P:保留文件时间戳
• -overwrite_original_in_place:覆盖原文件,并尽量保持文件系统属性(官方 In-place Editing)
⸻
4)批量操作:一张模板 → 整个目录
假设 source.jpg 含 GPS,要把其 GPS 写入当前目录下所有 NEF:
cd /path/to/folder
exiftool -tagsFromFile ../source.jpg -gps:all -ext NEF -r .
解释:
• -ext NEF:只处理 NEF 文件
• -r .:递归处理子目录
• 避免 *.*,否则可能匹配 _original 或 .DS_Store 文件(官方 FAQ 有提醒)
覆盖写入(危险操作,需先备份):
exiftool -P -overwrite_original_in_place
-tagsFromFile ../source.jpg -gps:all -ext NEF -r .
⸻
5)从 XMP Sidecar 导入 GPS
如果 NX Studio 把 GPS 写在 .xmp 文件:
exiftool -tagsFromFile image.nef.xmp -gps:all image.nef
ExifTool 会把 .xmp 里的 GPS 信息同步到 NEF 文件(参考 XMP Tag Handling)。
⸻
6)按 GPX 轨迹打点
若有 GPX 轨迹文件,可根据照片时间自动匹配 GPS:
exiftool -geotag track.gpx *.NEF
支持时区偏移、插值(详见官方 Geotagging 文档)。
⸻
7)手动写入经纬度
如果你手动知道坐标:
exiftool -GPSLatitude=39.9042 -GPSLatitudeRef=N
-GPSLongitude=116.4074 -GPSLongitudeRef=E photo.nef
使用 -n 可避免格式化,直接写入数值。
⸻
8)验证与回滚
验证写入结果
exiftool -a -G1 -s -gps* target.nef
确认 GPSLatitude、GPSLongitude、GPSDateStamp 等标签已写入。
回滚方法
• 如果有 _original 文件:手动还原或使用:
exiftool -restore_original target.nef
• 若已用 -overwrite_original_in_place:只能依赖事前备份。
⸻
9)常见坑 & 最佳实践
✅ 先备份,再操作
✅ 先测试 2–3 张,再批量运行
✅ 避免 *.*,用 -ext 精确指定文件类型
✅ 注意不同软件读取的 group(EXIF vs XMP)
✅ 保留 _original 是自动安全网
⸻
10)批量脚本示例(macOS / bash)
保存为 copy_gps_from_template.sh,然后:
chmod +x copy_gps_from_template.sh
./copy_gps_from_template.sh source_with_gps.jpg /path/to/target_dir
脚本内容:
#!/usr/bin/env bash
set -euo pipefail
SOURCE=”$1” # 模板文件(有 GPS 的图片)
TARGET_DIR=”$2” # 目标目录
EXT=”NEF” # 要处理的扩展名
if [ -z “$SOURCE” ] || [ -z “$TARGET_DIR” ]; then
echo “Usage: $0
exit 1
fi
echo “Dry-run: files that WOULD be processed:”
find “$TARGET_DIR” -type f -iname “*.${EXT}” -print | sed -n ‘1,50p’
echo “—-“
echo “To actually run, edit script and uncomment exiftool command.”
实际运行(保留 _original)
exiftool -tagsFromFile “$SOURCE” -gps:all -ext “$EXT” -r “$TARGET_DIR”
覆盖原文件(危险)
OVERWRITE_FLAGS=”-P -overwrite_original_in_place”
exiftool $OVERWRITE_FLAGS -tagsFromFile “$SOURCE” -gps:all -ext “$EXT” -r “$TARGET_DIR”
echo “Done. Verify with: exiftool -a -G1 -s -gps*
⸻
📌 总结
• ExifTool 是处理照片 GPS 信息的标准工具。
• 既可以从一张“模板”照片复制 GPS,也可以从 XMP sidecar 或 GPX 轨迹导入。
• 默认 _original 文件机制提供了安全保障,建议初期不要关闭。
• 批量处理时,要谨慎,推荐小规模试运行。
⸻
要不要我帮你再写一份 针对“先小规模测试 → 大规模批处理”的实操清单(比如一个三步 checklist,你只要按顺序执行,就能避免 90% 的坑)?