我正在尝试使用 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