使用ffmpeg生成无任何失真的视频缩略图

Use ffmpeg to generate video thumbnail without any distortion

要从视频中获取 200x100 缩略图,我会 ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg。但是,如果源视频的纵横比与 200x100 不同,则缩略图会变形(水平或垂直拉伸或挤压)并且看起来很糟糕。

有没有办法 ffmpeg 可以找出 500x200 视频 100px 太宽,然后从右边删除 50px50px 从左边开始制作视频 400x200?因为 400x200200x100 的宽高比相同,所以缩略图不会变形。

我知道还有其他工具可以对 ffmpeg 生成的缩略图执行此操作,但我更喜欢在 ffmpeg 内执行此操作,而不必再次处理缩略图。

如果您的缩略图尺寸固定为 200x100,则 运行

ffmpeg -ss 100 -i /tmp/video.mp4 -vf "scale='if(gt(dar,200/100),100*dar,200)':'if(gt(dar,200/100),100,200/dar)',setsar=1,crop=200:100"  -frames:v 1 image.jpg

缩放过滤器检查源和缩放的纵横比,以便一个维度适合 200x100 canvas 和其他超调,除非它是完美匹配。然后裁剪过滤器将其从中心裁剪为 200x100,从而处理越界区域。

您可以在 scale 过滤器中使用 force_original_aspect_ratio 选项。

ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -q:v 2 -vf "scale=200:100:force_original_aspect_ratio=increase,crop=200:100" image.jpg