Estou tentando gerar miniaturas de imagens usando ffmpeg. A pasta contém vários arquivos jpeg com diferentes resoluções.
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
Funciona com a maioria das imagens na pasta, mas crop=238:358
falhará dependendo de determinadas resoluções de imagem:
input1.jpg: 500x800
redimensionar e cortar com sucesso
input2.jpg: 470x800
redimensionar e cortar falha:
Tamanho muito grande ou não positivo inválido para largura '238' ou altura '358'
O problema ocorre quando as imagens dimensionadas são 237px
obtidas 238px
devido ao dimensionamento da proporção.
Como este é um script processando vários arquivos, estou procurando uma solução que possa lidar com todas as resoluções de imagens
O filtro de escala truncará o resultado das expressões para um número inteiro e é possível que a expressão produza, por exemplo, 237,999, que é truncado para 237. A solução alternativa é aumentar ligeiramente os coeficientes, então
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