使用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
太宽,然后从右边删除 50px
和 50px
从左边开始制作视频 400x200
?因为 400x200
与 200x100
的宽高比相同,所以缩略图不会变形。
我知道还有其他工具可以对 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
要从视频中获取 200x100
缩略图,我会 ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg
。但是,如果源视频的纵横比与 200x100
不同,则缩略图会变形(水平或垂直拉伸或挤压)并且看起来很糟糕。
有没有办法 ffmpeg
可以找出 500x200
视频 100px
太宽,然后从右边删除 50px
和 50px
从左边开始制作视频 400x200
?因为 400x200
与 200x100
的宽高比相同,所以缩略图不会变形。
我知道还有其他工具可以对 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