终端:将多个 JPG 文件重命名为 HEIC 格式并给出条件

终端:将多个 JPG 文件重命名为 HEIC 格式并给出条件

我有一个文件夹,里面有很多用我的 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

相关内容