使用ffmpeg生成视频缩略图不失真

Posted

技术标签:

【中文标题】使用ffmpeg生成视频缩略图不失真【英文标题】:Use ffmpeg to generate video thumbnail without any distortion 【发布时间】:2017-05-26 01:26:09 【问题描述】:

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

有没有办法让ffmpeg 找出例如500x200 视频的100px 太宽,并从右侧删除50px 和从左侧删除50px,从而制作视频@987654330 @?由于400x200200x100 的纵横比相同,因此缩略图不会失真。

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

【问题讨论】:

这可能会有所帮助:***.com/questions/8218363/… 【参考方案1】:

您可以在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

【讨论】:

当视频比您想要的缩略图的纵横比更高或更宽时,这是否同样有效?例如,如果视频对于纵横比来说太宽了 100 像素,它会从左右删除相等的部分(所以每个 50 像素)? @LordNeckbeard - 缩放器将 SAR 保留在输出中,第三方应用程序不遵守此规则。 Photoshop,例如尊重 JPG 的 SAR,但不尊重 PNG。 Firefox 不支持这两种格式。 @user779159 如果它太宽或太高,它将裁剪多余的部分。裁剪将自动居中。如果要调整裁剪坐标,请参阅crop filter documentation。 如果视频是非正方形的,setsar=1 会产生错误的结果。缩放本身必须生成一个在被视为方形像素时不失真的栅格。 如果您正在处理具有非方形像素的视频,即 PAL、NTSC、HDV 或变形 DVD 文件,则 LN 的答案将不起作用。对于方形像素视频,例如移动摄像头视频或大多数网络视频,您会没事的。我的命令将适用于所有来源,【参考方案2】:

如果您的缩略图大小固定为 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 画布,而另一个尺寸适合于其他尺寸,除非它是完美匹配的。然后裁剪过滤器将其从中心裁剪为 200x100,从而处理超出范围的区域。

【讨论】:

这可能导致输出小于请求的维度之一,并导致裁剪失败(例如,使用 115:87 SAR 的输入)。 是的,-1 不考虑 SAR。已更正。

以上是关于使用ffmpeg生成视频缩略图不失真的主要内容,如果未能解决你的问题,请参考以下文章

使用ffmpeg生成视频缩略图;从 RTMP 服务器抓取

利用FFmpeg生成视频缩略图

使用 ffmpeg 或其他软件从视频中每个场景变化的中间生成缩略图

FFmpeg进阶:生成视频的缩略图

利用FFmpeg生成视频缩略图 2.3.1

利用FFmpeg生成视频缩略图 2.1.8