ffmpeg:帧的缩略图,保留纵横比,应用背景/填充/填充颜色



我已经找到了如何在保持纵横比的同时缩放缩略图以保持在指定的边界尺寸内。例如,要将以6秒显示的帧输入到input.mp4视频文件中,并将其缩放为96x60(16:10纵横比):

ffmpeg -y -i input.mp4 -ss 6 -vframes 1 -vf scale="'if(gt(a,16/10),96,-1)':'if(gt(a,16/10),-1,60)'" output.png

这很好,很管用。

接下来,我想做同样的事情,但如果视频的宽高比不完全是16:10,那么我想通过进行上述变换,并用白色填充或填充空间,来强制输出图像的宽高比为16:10。也就是说,我希望输出就像我拍摄了一张96x48的图像,并将其放置在96x60的白色背景上,从而在96x48图像的上方和下方产生白色条。

理想情况下,我不想使用其他工具或库,如ImageMagick。最好是ffmpeg能够自己做到这一点。

以下是我所做的。对于-vf参数:

-vf "scale='if(gt(a,16/10),96,-1)':'if(gt(a,16/10),-1,60)', pad=w=96:h=60:x=(ow-iw)/2:y=(oh-ih)/2:color=white"

这将按顺序应用两个过滤器,用逗号分隔。

target_H = 2436
target_W = 1124
ffmpeg -i 1.mp4 -ss 1 -vframes 1 -vf "scale=min(iw*2436/ih,1124):min(2436,ih*1124/iw),pad=1124:2436:(1124-iw)/2:(2436-ih)/2:green" output.png

最新更新