要在 macOS 上将一文件夹的 HEIC 照片转换为 JPEG 并保留其 EXIF 元数据,可以使用 sips 创建 JPEG,然后使用 ExifTool 从每个原始文件中复制元数据。保留 HEIC 文件不变,并将新文件保存在单独的文件夹中。这个两步流程使元数据传输变得明确;仅仅成功转换图像并不代表所有 EXIF 字段都已写入 JPEG 中。
转换前你需要了解的事项
JPEG 是一种新的图像编码,因此图像数据会被重新压缩。转换时无法避免图像质量的改变。元数据则是另一个需要考虑的问题:相机详情、拍摄日期和 GPS 标签可能存储在原始文件中,但并非每个 HEIC 字段在 JPEG 中都有对应的存储格式。因此,复制元数据并不能保证每个字段都能原封不动地保留下来。如果有某个特定标签非常重要,请务必检查转换结果。
macOS 的“预览”可以将单张图像或多张所选图像导出为 JPEG:在一个窗口中打开图像,在边栏中选中它们,然后选择文件 > 导出。Apple 详细说明了格式和质量控制,但并未说明批量导出是否能保留所有 EXIF 字段。如果保留元数据是硬性要求,请使用下面介绍的明确复制并检查的工作流程。Apple 预览转换指南
使用终端进行转换并复制元数据
该工作流程使用 Apple 的 sips 命令转换每张图像,然后使用 ExifTool 从对应的原始文件中复制元数据。请先按照 ExifTool 的官方安装说明安装该工具。创建一个包含 HEIC 文件的源文件夹和一个空的目标文件夹。在示例中,文件夹分别为 ~/Pictures/HEIC-Originals 和 ~/Pictures/JPEG-Converted;如果你的路径不同,请进行相应修改。
打开终端并运行以下完整的 Bash 示例代码。它可以处理文件夹和文件名中的空格,不区分大小写识别 .heic 和 .heif 扩展名,并将 JPEG 写入单独的目标文件夹。
src="$HOME/Pictures/HEIC-Originals"
out="$HOME/Pictures/JPEG-Converted"
mkdir -p "$out"
find "$src" -maxdepth 1 -type f \( -iname '*.heic' -o -iname '*.heif' \) -print0 |
while IFS= read -r -d '' file; do
name=$(basename "${file%.*}")
jpg="$out/$name.jpg"
if sips -s format jpeg "$file" --out "$jpg"; then
exiftool -TagsFromFile "$file" -all:all -overwrite_original "$jpg"
else
printf 'Conversion failed: %s\n' "$file" >&2
fi
done
sips 命令负责生成 JPEG;ExifTool 的 -TagsFromFile 和 -all:all 选项则从指定的原始文件中复制元数据。-overwrite_original 选项可防止 ExifTool 为每个 JPEG 留下备份副本。ExifTool 的文档介绍了元数据复制功能,并指出目标格式能够容纳的标签取决于该格式本身。ExifTool 应用程序文档
该脚本仅在源文件夹的顶层目录中查找。如果你的照片存放在嵌套文件夹中,请分别对每个文件夹运行脚本,或调整搜索和目标路径,以免同名文件相互覆盖。确保目标文件夹为空,或者其文件名不会与现有文件发生冲突。在检查输出结果之前,请保留原始文件。
检查 JPEG 是否包含所需的元数据
使用 ExifTool 对比检查转换后的 JPEG 及其源文件。将示例文件名替换为你批次中的某个文件名:
exiftool -a -G1 -s "$HOME/Pictures/HEIC-Originals/IMG_0001.HEIC"
exiftool -a -G1 -s "$HOME/Pictures/JPEG-Converted/IMG_0001.jpg"
对比你关心的字段,例如 DateTimeOriginal、相机制造商和型号以及 GPS 坐标。如果某个字段出现在 HEIC 中但未出现在 JPEG 中,则说明转换或元数据复制未能以可用形式保留它;不要仅仅因为访达显示了日期或 JPEG 能够正常打开就假定元数据已被保留。ExifTool 可以读取许多图像格式的元数据,但不同格式支持的标签和可写字段各不相同。ExifTool 格式和标签文档
常见问题与局限性
如果 sips 报告无法读取文件,请检查该文件是否为受支持的图像,以及文件扩展名是否与文件类型相符。如果终端提示 exiftool: command not found,则表示 ExifTool 未安装或不在 shell 的路径(PATH)中。如果两个原始文件的主文件名相同,脚本会将其定向至同一个 JPEG 名称;请在不同的目标文件夹中处理这些文件,或在转换前对其进行重命名。
EXIF 复制并不会保留与原始照片相关的所有属性。JPEG 无法表示仅限 HEIC 的数据,而且复制标签并不会使 JPEG 的像素与 HEIC 解码后的图像完全一致。对于重要归档,请保留原始 HEIC 文件,并将 JPEG 视为兼容性副本。如果目标用途仅需要快速更改格式且元数据无关紧要,使用“预览”官方说明的批量导出更为简单;如果特定 EXIF 字段非常重要,请按步骤转换、复制并进行检查。
参考来源
在 Mac 上的“预览”中转换图像文件类型 — Apple 支持
ExifTool 应用程序文档 — ExifTool
ExifTool 标签名称 — ExifTool
安装 ExifTool — ExifTool