
ffmpeg を使用して画像のサムネイルを生成しようとしています。フォルダーには、さまざまな解像度のさまざまな jpeg ファイルが含まれています。
ffmpeg -y -i input1.jpg -filter_complex "scale=(iw*sar)*max(238/(iw*sar)\,358/ih):ih*max(238/(iw*sar)\,358/ih), crop=238:358" thumbnail.jpg
フォルダー内のほとんどの画像で動作しますが、crop=238:358
特定の画像の解像度によっては動作しない場合があります。
input1.jpg: 500x800
サイズ変更と切り取りに成功しました
input2.jpg: 470x800
サイズ変更と切り取りが失敗します:
幅 '238' または高さ '358' に対して大きすぎるか正でないサイズが無効です
この問題は、アスペクト比のスケーリングが原因で、拡大縮小された画像が では237px
なく になる場合に発生します。238px
これは多数のファイルを処理するスクリプトなので、すべての画像解像度を処理できるソリューションを探しています。
答え1
スケールフィルタは式の結果を整数に切り捨てます。そのため、式が例えば237.999を生成し、237に切り捨てられる可能性があります。回避策は係数を少し増やすことです。
ffmpeg -y -i input1.jpg -vf "scale=(iw*sar)*max(238.1/(iw*sar)\,358.1/ih):ih*max(238.1/(iw*sar)\,358.1/ih), crop=238:358" thumbnail.jpg