iPhoneで撮った写真をPCに移すと、拡張子が .HEIC になっている。写真アプリでは開く。ところが、ブログに上げようとしたり、少し古い画像ソフトに読ませようとすると、そこで止まる。同じ写真なのに、渡した先で急に扱えなくなる。
変換サイトに上げれば済む話ではある。ただ、人の顔が写っているものを他所のサーバーに送るのは気が進まない。枚数がまとまると、なおさら面倒になる。
それで、手元で完結する小さな道具をAIに作ってもらった。この記事は、その半日の話。

同じものを配布ページに置いてある。Windows 10・11(64bit)用、ZIPで約25MB、Pythonは要らない。PCを買い替えたときに自分で取りに行けるようにしておいた。
まず出てきたのは、黒い画面だった
最初に渡されたのは、写真の入ったフォルダをバッチファイルに落とすと黒い画面が開いて、変換の経過が流れていくものだった。動きはする。撮影日時も向きも引き継がれている。
ただ、毎回黒い画面が出る。画質を変えたければ、コマンドの後ろに呪文のような文字を足す。使う場所としては、そこで止まっていた。
それで、縮小専用。の名前を出した。画像を小さくするときに長く使っている道具で、窓にファイルを放り込めば終わる。あれと同じ使い勝手にしてほしい、と。
日本語のバッチファイルが、文字化けで壊れた
最初のバッチファイルは、中の案内文が日本語で書いてあった。これが動かなかった。
Windowsのコマンド画面は、バッチファイルの中身を昔の文字コードとして読む。UTF-8で書かれた日本語は、読み込まれた時点で意味の違う記号の列になり、そのすぐ下にある命令文まで巻き込んで壊れる。画面には「’ァイル、またはフォルダを…’ は、内部コマンドまたは外部コマンドとして認識されていません」という、見たことのない叱られ方が出た。
直し方は単純で、バッチファイルの中身は英数字だけにして、日本語の表示は全部Python側に出させた。窓のある版ができた今となっては使わない部分だけれど、同じ落とし穴は他でも踏みそうなので書いておく。
窓の下が、画面の外に出ていた
窓のある版ができて、見た目を確かめたら、進捗バーとログが窓に収まっていなかった。上の設定の枠が場所を取りすぎて、下の部品が押し出されていた。
確かめ方も途中で変えた。最初は画面をそのまま撮ろうとして、裏で開いていた別のアプリが写り込んだ。撮り直しでは、画面を撮るのをやめて、そのウィンドウ自身に自分の絵を描かせる方法に切り替えた。こうすると、他のアプリは一切写らない。AIに画面を見せる必要があるときは、これくらいで足りる。
実際の数字
手元で作った1200万画素(4032×3024)の画像で測った。iPhoneの写真そのものではなく、同じ画素数・同じくらいの容量(1枚0.97MB)のものを30枚用意している。
| 測ったもの | 結果 |
|---|---|
| 30枚の変換(同時に8枚ずつ) | 11.9秒(1枚あたり0.40秒) |
| 同じ30枚を1枚ずつ順番に | 40.7秒(1枚あたり1.36秒) |
| 変換後のJPGの大きさ | 1枚あたり平均1.38MB |
同時に処理する分、3.4倍速い。使ったPCはRyzen 5 PRO 4650U(12スレッド)で、特別速い機械ではない。
ひとつ正直に書いておくと、容量は増える。HEICは新しくて効率のいい形式なので、同じ見た目でも小さい。29.1MBだった30枚が、変換後は41.3MBになった。1.4倍。開けるようにするための引き換えだと思うしかない。
1ファイルにまとめたら、起動に7秒かかった
最初に渡された実行ファイルは、必要なものを全部1個に詰め込んだ24MBのexeだった。持ち運びには良い。ただ、起動が遅かった。
| 形式 | 窓が出るまで | 30枚の変換が終わるまで |
|---|---|---|
| 1ファイルのexe(24MB) | 5.0〜7.5秒 | 12.3秒 |
| フォルダ形式(67MB) | 0.9〜1.0秒 | 10.3秒 |
1ファイル形式は、起動のたびに中身を一時フォルダへ展開している。その数秒が毎回かかる。フォルダ形式にすると展開が要らないので、1秒で窓が出る。
縮小専用。も、中を見ればexeとiniが並んだフォルダだった。真似ようとしていたものが、最初から答えだったことになる。差し替えた。
設定を覚えていたので、テスト用の写真が30枚消えた
この道具には「変換に成功したら元のHEICを削除する」という項目がある。チェックを入れると確認が出るし、私は意味を分かった上で一度入れて、窓を閉じた。
設定はiniファイルに保存される。次に開いたときも、同じ設定で立ち上がる。当たり前の作りだ。
そして次に動かしたとき、変換し終わった元ファイルが、静かに30枚消えた。消えたのは速度を測るために用意したコピーだったので実害はなかった。けれど、これが撮ってきた写真だったら戻らない。ごみ箱にも入らない。
原因は不具合ではなく、前回の設定が効いていたからという、それだけのことだ。ただ「それだけのこと」で写真は消える。
直し方は2つ入れてもらった。
- 削除する設定が入っているときは、ドロップの枠の下に赤い字で「※ 変換に成功した元の HEIC は削除されます」と出しておく
- その設定のまま最初の変換を始めるとき、一度だけ確認を出す。「いいえ」を選ぶと、元ファイルを残す設定に切り替えてから変換する
チェックを入れた直後に確認を出すだけでは足りなかった。危ない設定は、入れたときではなく、効く瞬間にもう一度知らせる。今回いちばん残ったのはこれだった。
スタートへのピン留めだけ、手作業が残った
できあがったので、スタートメニューに入れてもらった。一覧に並ぶところまでは自動で済んだ。
ところが、スタート画面へのピン留めはできなかった。Windows 11はピン留めの情報を暗号化されたファイルで持っていて、外から書き換える手段が塞がれている。無理に触るとスタートメニューが壊れる可能性がある。
結局、「すべてのアプリ」から右クリックして「スタートにピン留めする」を1回。自動化できないものは、素直に手でやるほうが早い。
引き継がれるもの
- 撮影日時、カメラの機種、GPSなどの情報
- 色の指定(ICCプロファイル)
- ファイルの更新日時と作成日時。写真アプリで日付順に並べたときに崩れない
- 写真の向き。回転の情報を画像そのものに反映させるので、どのビューアでも正しい向きで出る
弱いところ
- Live Photoの動画部分(.MOV)は変換しない。静止画だけ
- 自分でビルドした署名なしのexeなので、初回起動時にWindowsの青い警告が出る。[詳細情報]→[実行]で進む
- さっき書いたとおり、容量は1.4倍になる
- フォルダ形式にしたので、中身は1000ファイルを超えた。持ち出すときは丸ごとコピーする
半日の道具
作ってもらったのは、Pythonが2本とアイコンが1つ。窓の形を決めて、測って、直して、また測る、を何度か繰り返した。
私がしたのは、「縮小専用。みたいにして」と言ったことと、遅いと言ったことと、消えた30枚を報告として受け取ったことだけだ。
それでも、PCに移すたびに引っかかっていた .HEIC が、放り込めば終わるようになった。小さな不便は、小さな道具でちょうど消える。前に作ったMarkdownのビューアのときと、同じことをまた思った。






