iPhoneで撮影した画像の形式HEICを全部まとめてJPEGに変換する


概要

僕は普段ブログ用の画像をiPhoneで撮影して、airdropでMacBook Proに転送しているんですが、得られる画像が IMG_%04d.HEIC というあまり馴染みのない画像形式 HEIC になっています。 (→追記1

画像・動画の変換には普段 ffmpeg を使うんですが、僕が brew でインストールした ffmpegHEIC 形式に対応しておらず、変換ができず。

諦めてプレビューで開いて ファイル > 書き出す を使って jpeg 形式に変換していたのですが、流石に今後もずっとやる作業 && 量が多いと本当に時間がもったいないので機械的に処理したいと思い、したのスクリプトを作りました

作ったスクリプト

できることは、「同じディレクトリにある .HEIC で終わるファイルを全て同名の .jpg に変換し保存する」ことです。

#!/bin/zsh

for file in `ls *.HEIC`; do
  filename=$file:t:r
  sips --setProperty format jpeg $file --out ${filename}.jpg
done

convert.zsh とかにして chmod u+x convert.zsh で実行権限を与えた後 ./convert.zsh とかで使います。

:t とか :r とかはおそらく zsh にはあるが bash sh にはないと思うので(たぶん)、これは zsh でしか動きません。

僕が使っているMacBook Pro 16"は元々Catalinaで zsh が標準だったので、便利に使わせてもらいました。

参考1. 画像ファイルの形式をHEICからJPGにしたい
参考2. Zsh: Get Filename or Extension from Path

追記1

@ktysne さんからのコメントで(ありがとうございます)、「iOSの[設定]>[カメラ]>[フォーマット]から[互換性優先]」を設定するとそもそも JPEG/H264 で保存できることがわかりました。設定調べる前にスクリプト書いてしまった..

4K/60fpsとか1080p/240fpsを使うには高効率にしないといけないようなので注意が必要そう。iPhoneで4K/60fpsで動画撮影もしている人は今回書いてしまったスクリプトが便利かも。笑