GIFアニメーションは便利ですが、ファイルサイズが大きくなりがちです。特にDiscordなどでファイルサイズ制限に引っかかることも多いですよね。今回は、PowerShellを使って同じディレクトリにある大容量のGIFファイルを一括で圧縮する方法を紹介します。
必要な準備
この方法を使うには、ImageMagickが必要です。インストールは以下のコマンドで簡単にできます:
choco install imagemagick.app -y
※Chocolateyがインストールされていない場合は、ImageMagickの公式サイトからダウンロードしてインストールすることもできます。
一括圧縮コマンド
以下のコマンドをPowerShellで実行すると、現在のディレクトリにある2MB以上のGIFファイルを自動的に圧縮します:
Get-ChildItem -File *.gif | Where-Object { $_.Length -gt 2MB } | ForEach-Object -Begin { $total = @($input).Count; $current = 0 } -Process { $current++; Write-Host "処理中: $($_.Name) ($current/$total) - 元サイズ: $([math]::Round($_.Length/1MB, 2))MB"; magick convert $_.FullName -coalesce -colors 4 -quality 30 -layers optimize -scale 20% $_.FullName; Write-Host "完了: $($_.Name) - 圧縮後サイズ: $([math]::Round((Get-Item $_.FullName).Length/1MB, 2))MB `n" -ForegroundColor Green }
コマンドの説明
このコマンドは以下のことを行います:
- 現在のディレクトリ内の2MB以上のGIFファイルを検索(
*.gif
) - 各ファイルに対して以下の圧縮処理を実行:
- 色数を4色に削減
- 品質を30%に設定
- フレーム間の最適化
- サイズを20%に縮小
- 進捗状況を表示:
- 処理中のファイル名
- 処理の進捗(例:2/5)
- 圧縮前後のファイルサイズ
カスタマイズ方法
圧縮設定を調整したい場合は、以下のパラメータを変更できます:
-
-colors 4
: 色数(数字を大きくすると品質が良くなる) -
-quality 30
: 品質(0-100、大きいほど高品質) -
-scale 20%
: 出力サイズ(パーセンテージ) -
*.gif
: 対象ファイルの拡張子フィルター
例えば、もう少し品質を重視する場合:
# 色数を増やし、品質を上げ、サイズ縮小を控えめにした例
-colors 16 -quality 60 -scale 50%
また、あまりないかもしれないですが、拡張子がついてない場合は*.gif
フィルターを除去して対応できます。
注意点
- 元ファイルは上書きされるので、必要に応じて事前にバックアップを取ることをお勧めします
- 極端な圧縮設定は画質の大幅な劣化につながる可能性があります
- GIF以外のファイルに対して使用する場合は、ファイル形式によって圧縮効果が異なる可能性があります
おわりに
このスクリプトを使えば、大量のGIFファイルを簡単に一括圧縮できます。特にDiscordやSlackなどのファイルサイズ制限に引っかかる場合に便利です。圧縮設定は用途に応じて適宜調整してください。