【问题标题】:Use ffmpeg to generate video thumbnail without any distortion使用ffmpeg生成视频缩略图不失真
【发布时间】: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 中执行此操作,而不必再次处理缩略图。

【问题讨论】:

标签: image video ffmpeg thumbnails video-processing


【解决方案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。已更正。
猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 2018-12-21
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
相关资源
最近更新 更多