使用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 @?由于400x200
与200x100
的纵横比相同,因此缩略图不会失真。
我知道还有其他工具可以对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生成视频缩略图不失真的主要内容,如果未能解决你的问题,请参考以下文章