目的
Windows11でHEIC画像からスライドショー動画を作る
背景
iPhoneで撮った写真HEICファイル(iOSデバイスのデフォルトの画像形式)をWindows11で受け取ることがある。Windows11でHEIC画像からスライドショー動画を作ろうと思ったら色々苦労したのでメモする。
- Windows11で、HEICファイルをフォトアプリで読み込めたが、スライドショー動画はエラーで作られなかった
- Windows11で、HEICファイルに対応している無料アプリが見つからない
- Windows11で、HEICファイルに対応していそうな無料アプリでも、画像の一部分しか読み込まないことがある
- shotcut version24.11.17 要望がcloseされていないので、まだ未対応かも
概要
私の知るところでは、Windows11でHEICファイルからスライドショー動画を作られる無料アプリが見つからなかった。
JPEGからは作られるので、HEICからJPEGを作る以下の二つの方法を紹介する。
- ImageMagickでHEICをJPEGに変換してから、スライドショー動画作成アプリで使う
- PythonライブラリimagecodecsでHEICをJPEGに変換してから、スライドショー動画作成アプリで使う
JPEGであれば、どんなスライドショー動画作成アプリでも良いと思うが、今回はshotcutを使う。
※HEICからJPEGを作るとビットの深さが落ちて画像は劣化する
※imagecodecsではEXIF情報をコピーしていないので情報が空欄になる
左:HEIC、中:ImageMagickデフォルト変換JPEG、右:imagecodecsデフォルト変換JPEG
サイズは、ImageMagicだと2倍ほどに増えて、imagecodecsだと1割ほど減っていた
1. ImageMagickでHEICをJPEGに変換する手順
セットアップ前環境
- Windows11 バージョン24H2(OSビルド26100.2605)
- chocolatey v2.3.0
※chocolateyについては以下の記事が参考になる
Chocolateyを使ってパッケージを管理する
- chocolatey v2.3.0
セットアップ
- Windowsキーを押す
- 検索ボックスに「cmd」と入力
- Ctrl + Shift + Enterを押す(管理者として実行)
- 以下のコマンドを実行する(途中選択肢が出る場合は、A + Enterする)
choco upgrade chocolatey
choco install imagemagick
choco install shotcut
セットアップ後環境
- Windows11 バージョン24H2(OSビルド26100.2605)
使い方
以下のコマンドで、カレントフォルダのheicファイルからjpgファイルを生成する
magick mogrify -format jpg *.heic
生成したjpgファイルを使って、以下の記事を参考にスライドショー動画を作成する
Shotcutで画像スライドショー動画(BGM付き)を作成
2. PythonライブラリimagecodecsでHEICをJPEGに変換する手順
セットアップ前環境
- Windows11 バージョン24H2(OSビルド26100.2605)
- chocolatey v2.3.0
※chocolateyについては以下の記事が参考になる
Chocolateyを使ってパッケージを管理する
- chocolatey v2.3.0
セットアップ
- Windowsキーを押す
- 検索ボックスに「cmd」と入力
- Ctrl + Shift + Enterを押す(管理者として実行)
- 以下のコマンドを実行する(途中選択肢が出る場合は、A + Enterする)
choco upgrade chocolatey
choco install python
choco install pycharm-community
choco install visualstudio2022buildtools
choco install visualstudio2022-workload-vctools
choco install shotcut
GitHub vcpkgから、zipをダウンロードして展開する
またはクローンする
git clone https://github.com/Microsoft/vcpkg.git
展開フォルダでコマンドプロンプトを開き、以下のコマンドを入力する
.\bootstrap-vcpkg.bat
.\vcpkg integrate install
.\vcpkg install libde265:x64-windows
.\vcpkg install x265:x64-windows
.\vcpkg install libheif:x64-windows
pip install pillow
pip install pyheif
ここで以下のエラーが出るなら、chocolatyでvisualstudio2022buildtoolsがきちんと入ってないかもしれない
以下のパスにあるインストーラーを起動してインストール済みか確認する
C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe
以下はインストール済みの状態。インストール済みになっていない場合は、 この記事「「Microsoft Visual C++ 14.0 or greater is required.」が出た場合の対処方法」を参考にインストールする
インポートに成功するが、実行時に以下のエラーがでる
_libheif_cffiは存在するように見える?(Python仮想環境管理のパスが.venv2の場合)
vcpkgでビルドされて、以下のファイルが配置されているので
D:\git\vcpkg\packages\libheif_x64-windows\bin\heif.dll
D:\git\vcpkg\packages\libheif_x64-windows\lib\heif.lib
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_cxx.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_items.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_plugin.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_properties.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_regions.h
D:\git\vcpkg\packages\libheif_x64-windows\include\libheif\heif_version.h
D:\git\vcpkg\packages\libde265_x64-windows\bin\libde265.dll
D:\git\vcpkg\packages\libde265_x64-windows\lib\de265.lib
D:\git\vcpkg\packages\libde265_x64-windows\include\libde265\de265.h
D:\git\vcpkg\packages\libde265_x64-windows\include\libde265\de265-version.h
D:\git\vcpkg\packages\libde265_x64-windows\include\libde265\en265.h
D:\git\vcpkg\packages\x265_x64-windows\bin\libx265.dll
D:\git\vcpkg\packages\x265_x64-windows\lib\libx265.lib
D:\git\vcpkg\packages\x265_x64-windows\include\x265.h
D:\git\vcpkg\packages\x265_x64-windows\include\x265_config.h
以下に従い
以下のdllだけ.venv2/Scripts以下に配置した(Python仮想環境管理のパスが.venv2の場合)
D:\git\vcpkg\packages\libheif_x64-windows\bin\heif.dll
D:\git\vcpkg\packages\libde265_x64-windows\bin\libde265.dll
D:\git\vcpkg\packages\x265_x64-windows\bin\libx265.dll
すると、以下のエラーに変わったので
- ImportError: No module named _cffi_backend
以下に従い
cffiを入れなおした
pip uninstall cffi
pip install cffi
動き出したが、以下のエラーになった
変換エラー: struct heif_decoding_options: wrong total size (cdef says 72, but C compiler says 80). fix it or use "...;" as the last field in the cdef for struct heif_decoding_options to make it flexible: C:\Users\igapon\Downloads\1229\025.heic
以下と同じ状況のようだ、回避策が提案されているが、ここまでにして、imagecodecsを使うことにする
以下を実行する
pip install imagecodecs
セットアップ後環境
- Windows11 バージョン24H2(OSビルド26100.2605)
使い方
GitHubを、HEICファイルがあるフォルダにダウンロードして以下を実行する
python heic2jpg.py
HEICファイルがあるフォルダを引数で指定する場合は以下の通り実行する
python heic2jpg.py -p "C:\Users\igapon\Downloads\1229\heic"
生成したjpgファイルを使って、以下の記事を参考にスライドショー動画を作成する
Shotcutで画像スライドショー動画(BGM付き)を作成
おわりに
PythonにHEIC向けライブラリがあるので、Windows11でも簡単に対応できると思って取り組み始めたが、とても苦戦した。現時点ではImageMagickを使うのが楽だと思う。
関連リンク
参考サイト
- Shotcutで画像スライドショー動画(BGM付き)を作成
- Chocolateyを使ってパッケージを管理する
- 【python】pip installの際に「error: Microsoft Visual C++ 14.0 is required」が発生した場合の対応方法
- 「Microsoft Visual C++ 14.0 or greater is required.」が出た場合の対処方法
- vcpkgを使ってみた
- vcpkg を用いた Win/Mac/Linux用 c++プログラムの cmake & vscode 実行例
- pip install pyheif doesnt work on windows #2
- No module named _cffi_backend
- HEIF(HEIC)ファイルの読み書き実装