ゆう's Blog
ffmpeg でアニメGIFを「中央クロップ150px角のアニメWebP」に変換する

ffmpeg の crop は 入力画像より大きいサイズを指定すると必ずエラーになるため scale で短い方を150pxに“拡大”して揃えてから中央150px角を cropする。

アニメGIF → アニメWebP

ffmpeg -i input.gif \ -vf "scale='if(gt(iw,ih),-1,150)':'if(gt(iw,ih),150,-1)',crop=150:150" \ -c:v libwebp -loop 0 output.webp

アニメGIF → 静止サムネイル(PNG)

ffmpeg -i input.gif \ -vf "scale='if(gt(iw,ih),-1,150)':'if(gt(iw,ih),150,-1)',crop=150:150" \ -vframes 1 temp.png

● 1. まず短い方を 必ず150pxに揃える
横長(iw > ih)
→ 高さを150に、幅は自動計算(-1)
縦長(ih > iw)
→ 幅を150に、高さは自動計算(-1)
つまり 短い方が必ず150pxになる
● 2. その後に中央150px角を crop

ffmpeg の “increase” が効かない特殊ケース

Invalid too big or non positive size for width '150' or height '150' Failed to configure input pad on Parsed_crop_1 Error reinitializing filters! Failed to inject frame into filter network: Invalid argument Error while filtering: Invalid argument

内部で「拡大後のサイズが整数にならない」などの理由で crop の初期化に失敗することがある。
220×123 の GIF は、縦が 123px(150px 未満)なので本来は increase で 150px 以上に拡大されるはずですが、 拡大後のサイズが 奇数/偶数の組み合わせで ffmpeg が scale → crop の再初期化に失敗することがあります。