如何用FFmpeg将MP4裁剪并调整为640x640的GIF?
解决FFmpeg将1280x720 MP4转为640x640正方形GIF的问题
你的核心问题是没先把16:9的原视频裁剪为正方形,直接缩放时保留了原比例,才得到1138x640的结果。要在单命令里完成裁剪→缩放→高质量GIF生成,可以用FFmpeg的filter_complex把所有操作串起来,不需要单独生成调色板的额外命令。
完整的单命令解决方案
ffmpeg -i input.mp4 -filter_complex "[0:v]crop=720:720:280:0,scale=640:640[v];[v]palettegen[pal];[v][pal]paletteuse" output.gif
命令拆解说明
裁剪为正方形:
原视频是1280x720(16:9),要得到正方形,我们以高度720为基准,把宽度裁剪到720。左右两侧需要各裁剪(1280-720)/2 = 280像素,所以crop=720:720:280:0的含义是:- 第一个值
720:裁剪后的宽度 - 第二个值
720:裁剪后的高度 - 第三个值
280:裁剪起始的X坐标(从左往右数280像素开始,实现居中裁剪) - 第四个值
0:裁剪起始的Y坐标(从顶部开始)
如果不想居中裁剪,比如要保留左侧内容,把第三个值改成0;保留右侧则改成560(1280-720)即可。
- 第一个值
缩放到640x640:
裁剪后的720x720正方形视频,通过scale=640:640直接缩放到目标尺寸,画面不会变形。高质量GIF生成:
通过palettegen生成优化的调色板,再用paletteuse结合调色板生成高质量GIF,这部分整合在同一个滤镜链里,不需要单独执行调色板生成命令。
可选参数调整
如果需要优化GIF的帧率、循环次数,可以在命令里添加额外选项:
- 添加
-r 15:设置GIF帧率为15(降低帧率可以减小文件体积) - 添加
-loop 0:设置GIF无限循环(默认就是无限循环,若要循环N次改成-loop N)
内容的提问来源于stack exchange,提问作者Joel Z.
相关产品推荐
相关产品推荐

