事の発端
iPhone で撮影した写真をパソコンに取り込んで編集を行うために iPhone から USB 経由でコピーする際、枚数が多いと非常に時間が掛かり、途中で止まってしまいます。
調べてみたところ iPhone の設定 -> 写真にある "MAC または PCに転送" が自動になっていると、保存されている HEIC 形式を jpeg に変換しながらコピーを行っているようです。その変換が非常に重いためかコピーに非常に時間が掛かったり、途中で止まってしまうようです。
設定 -> 写真にある "MAC または PC に転送" の設定を "元のフォーマットのまま" に変更するとファイルコピーに掛かる時間が短くなり、途中で止まってしまうようなことも無くなりました。
HEIC ファイルを見たい
コピーされた HEIC ファイルですが、そのままでは画像として見ることが出来ませんでした。HEIC ファイルはそのまま残しておいて、別の形式へ変換を行う事にします。
調べたところ ImageMagick – Convert, Edit, or Compose Digital Images で変換が出来るようなので、インストールを行って試してみます。
試してみるために ImageMagick のインストールを行いますが、今だと Windows にもパッケージ管理ツールがありますので、そちらを使います。
すでに Scoop を使ったことがありますので、こちらを使うことにします。
Scoop のインストール
Scoop の Quickstart に記載してあるコマンドを Windows Powershell を起動して実行します。
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time > irm get.scoop.sh | iex
Scoop 自体が日々更新されているため、インストール方法は変更になる可能性が高いです。Scoop を見て最新のインストール方法を確認して実行してください。
ImageMagick などのインストール
Scoop を使って ImageMagick のインストールを行います。Windows PowerShell を起動して以下のコマンドを実行します。
> scoop install imagemagick
ImageMagick はコマンドラインから実行して使います。コマンドラインで実行する際に使うと便利だと思われますので、Windows Terminal と PowerShell Core のインストールも行います。また、ファイルを編集するために Visual Studio Code もインストールします。
# Windows Terminal は scoop extras bucket にあります。bucket を追加するには git が必要なので git を install します。 > scoop install git # extras bucket を追加 > scoop bucket add extras # Windows Terminal をインストール > scoop install windows-terminal # PowerShell Core をインストール > scoop install pwsh # Visual Studio Code をインストール > scoop install vscode
HEIC ファイルを jpeg ファイルに変換
インストールした Windows Terminal を立ち上げ(ctrl + esc or Windows key を押して windows terminal と入力すると出てくるはず)て、HEIC ファイルをコピーしたディレクトリに移動し、ImageMagick で変換します。
# C:\Users\hoge\Pictures\iPhone に画像をコピーしている場合、上記ディレクトリに移動 > cd C:\Users\hoge\Pictures\iPhone # ImageMagick の convert コマンドを使って IMG_9640.HEIC を IMG_9640.JPG に変換 > magick convert IMG_9640.HEIC IMG_9640.JPG # 拡張子 JPG に関連付けされたプログラムで IMG_9640.JPG を開いて確認 > start IMG_9640.JPG
ImageMagick の convert にはいろいろなオプションがあり、品質 (-quality) の変更やリサイズ (-resize) などを行うことも出来ます。
> magick convert --help
で説明を読む事が出来ますので、設定を変えていろいろと試してみてください。
ディレクトリにある HEIC ファイルをまとめて変換
上記コマンドでファイルを一つ一つ変換することが出来ますが、大量にファイルがあると非常にめんどうな作業となります。そのような場合は script を書いて実行するとまとめて変換することが出来ます。
実行したディレクトリに jpeg というディレクトリが無ければ作成し、拡張子 HEIC のファイルを jpeg ファイルに変換して jpeg ディレクトリに保存する、という PowerShell Script を書くと以下のようになります。
$jpegdir = "jpeg" if(!(Test-Path $jpegdir)) { "created a $jpegdir directory" New-Item $jpegdir -ItemType Directory > $null } $itemList = Get-ChildItem .\*.HEIC $count = 1 foreach($item in $itemList) { $itemWithOutExt = [System.IO.Path]::GetFileNameWithoutExtension($item.Name); magick convert $item.Name .\$jpegdir\$itemWithOutExt.JPG Set-ItemProperty .\$jpegdir\$itemWithOutExt.JPG -Name LastWriteTime -Value (Get-ItemProperty $item.Name).LastWriteTime Set-ItemProperty .\$jpegdir\$itemWithOutExt.JPG -Name CreationTime -Value (Get-ItemProperty $item.Name).CreationTime $p = ($count / $itemList.Count * 100).ToSTring("0.0"); Write-Progress -Activity "HEIC to JPEG Convert" -Status "$p %" -CurrentOperation "convert $item -> .\$jpegdir\$itemWithOutExt.JPG" -PercentComplete $p $count++ }
上記の内容を Windows Terminal の PowerShell Core で下記のような操作を行い C:\Users\hoge\Desktop\heic2jpg.ps1 に保存します。
# C:\Users\hoge\Desktop に移動 > cd C:\Users\hoge\Desktop # Visual Studio Code で heic2jpg.ps1 を編集 > code heic2jpg.ps1 # 上記 PowerShell Script をコピペなどして保存
実行方法
保存したファイルを実行するには HEIC ファイルが保存されているディレクトリで上記 script を実行します。
# C:\Users\hoge\Pictures\iPhone に画像をコピーしている場合、上記ディレクトリに移動 > cd C:\Users\hoge\Picture\iPhone # C:\Users\hoge\Desktop\heic2jpg.ps1 を実行 > C:\Users\hoge\Desktop\heic2jpg.ps1 # 上記 PowerShell Script の実行が終わると jpeg ディレクトリに変換されたファイルが保存されていますので、画像ビューアなどで確認してください。
最後に
Scoop のインストール手順や ImageMagick の引数、スクリプトの中身など、公式のページを見て意味などを調べて理解をして実行してください。この記事を含めてググっても古い情報が多いです。公式のページを見ましょう。