![ffmpeg 裁剪:‘宽度无效,过大或非正值’](https://linux22.com/image/1601603/ffmpeg%20%E8%A3%81%E5%89%AA%EF%BC%9A%E2%80%98%E5%AE%BD%E5%BA%A6%E6%97%A0%E6%95%88%EF%BC%8C%E8%BF%87%E5%A4%A7%E6%88%96%E9%9D%9E%E6%AD%A3%E5%80%BC%E2%80%99.png)
我正在尝试使用 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