
Я пытаюсь сгенерировать миниатюры изображений с помощью 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