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 の再初期化に失敗することがあります。