我已经找到了如何缩放缩略图以保持在指定的边界尺寸内,同时保持纵横比。例如,要将显示在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可以自己做到这一点,那将是最好的。
答案 0 :(得分:4)
这就是我的用途。对于-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"
这将按顺序应用两个过滤器,用逗号分隔。
答案 1 :(得分:0)
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