![终端:将多个 JPG 文件重命名为 HEIC 格式并给出条件](https://linux22.com/image/147635/%E7%BB%88%E7%AB%AF%EF%BC%9A%E5%B0%86%E5%A4%9A%E4%B8%AA%20JPG%20%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%20HEIC%20%E6%A0%BC%E5%BC%8F%E5%B9%B6%E7%BB%99%E5%87%BA%E6%9D%A1%E4%BB%B6.png)
我有一个文件夹,里面有很多用我的 iPhone 拍摄的照片。结果一半是 JPG,一半应该是 HEIC 格式。
由于某种原因,该文件夹中的所有图片都是 JPG 扩展名,请检查此图片:https://i.stack.imgur.com/wHzT8.jpg
首先,我认为其他 JPG 是损坏的文件,如上图所示,当我尝试打开它们时出现错误。然后,我意识到它们应该是 HEIC 而不是 JPG,因为它们是 Apple Live Photos。当我手动重命名几个未以 HEIC 格式打开的 JPG 文件时,它们可以作为短视频正确打开,因为它们是实时照片。
我的问题是:有没有办法找到所有这些无法打开的虚假 JPG 文件并将它们从 .JPG 重命名为 .HEIC?我不能将所有 JPG 重命名为 HEIC,因为其他图片不是实时照片。
答案1
如果您有一个可以打开 JPG 文件但不能打开 HEIC 的命令行程序,您可以运行该程序并使用其退出代码来确定该文件是否是有效的 JPG。
您可以尝试convert
使用 imagemagick 的程序。
未经测试的示例:
for jpg in *.jpg
do
heic="${jpg%.jpg}.heic" # construct HEIC file name
tmp="$jpg.png" # temporary PNG file
if ! convert "$jpg" "$tmp" # try to convert
then
mv "$jpg" "$heic" # rename if conversion failed
fi
rm -f "$tmp" # PNG no longer needed
done
convert
当然,如果程序接受 HEIC 文件作为输入,则这不起作用。
示例代码的灵感来自于此:https://github.com/williamthing/Scripts/blob/master/Shell/jpg2png.sh