事の発端
iPhone で撮影した写真をパソコンに取り込んで編集を行うために iPhone から USB 経由でコピーする際、枚数が多いと非常に時間が掛かり、途中で止まってしまいます。
調べてみたところ iPhone の設定 -> 写真にある "MAC または PCに転送" が自動になっていると、保存されている HEIC 形式を jpeg に変換しながらコピーを行っているようです。その変換が非常に重いためかコピーに非常に時間が掛かったり、途中で止まってしまうようです。
設定 -> 写真にある "MAC または PC に転送" の設定を "元のフォーマットのまま" に変更するとファイルコピーに掛かる時間が短くなり、途中で止まってしまうようなことも無くなりました。
Scoop のインストール
Scoop の Quickstart に記載してあるコマンドを Windows Powershell を起動して実行します。
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
> irm get.scoop.sh | iex
Scoop 自体が日々更新されているため、インストール方法は変更になる可能性が高いです。Scoop を見て最新のインストール方法を確認して実行してください。
HEIC ファイルを jpeg ファイルに変換
インストールした Windows Terminal を立ち上げ(ctrl + esc or Windows key を押して windows terminal と入力すると出てくるはず)て、HEIC ファイルをコピーしたディレクトリに移動し、ImageMagick で変換します。
> cd C:\Users\hoge\Pictures\iPhone
> magick convert IMG_9640.HEIC 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 に保存します。
> cd C:\Users\hoge\Desktop
> code heic2jpg.ps1
実行方法
保存したファイルを実行するには HEIC ファイルが保存されているディレクトリで上記 script を実行します。
> cd C:\Users\hoge\Picture\iPhone
> C:\Users\hoge\Desktop\heic2jpg.ps1
作成日時と最終書き込み日時を元のファイルと同じ日時としています。また、素のままでは何も表示されずに動いているのか分かりませんので、Write-Progress を使ってプログレスバーを表示しています。
起動時に引数を渡して保存するディレクトリを変えられるようにする、同じように起動時に引数を渡して保存するフォーマットや品質を変えられるようにする、などの変更をするとより便利かもしれません。
最後に
Scoop のインストール手順や ImageMagick の引数、スクリプトの中身など、公式のページを見て意味などを調べて理解をして実行してください。この記事を含めてググっても古い情報が多いです。公式のページを見ましょう。