使用FFmpeg/ImageMagick转JPG为MP4:保留原图尺寸无裁剪方案问询
解决JPG转MP4时保留原图尺寸的方案(FFmpeg + ImageMagick)
我完全懂你这种 frustration——默认的FFmpeg或ImageMagick参数经常会偷偷调整图片尺寸来适配视频标准,导致辛苦处理的原图被裁剪。别担心,下面这两套方案能帮你严格保留原图尺寸,同时灵活调整帧率:
FFmpeg 实现方案
FFmpeg的核心问题在于部分编码器(比如libx264)要求视频分辨率是2的倍数,如果原图尺寸不符合,默认会自动裁剪或拉伸。我们可以通过参数强制适配规则但不裁剪,或者直接用兼容任意尺寸的编码器。
通用命令(适配所有尺寸 + 自定义帧率)
ffmpeg -framerate 10 -loop 1 -i input.jpg -c:v libx264 -crf 18 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4
参数解释:
-framerate 10:设置视频帧率为10fps,你可以改成24、30等任意数值(比如要30fps就写-framerate 30)-loop 1:让图片循环播放(如果只需要播放一次,去掉这个参数即可)-c:v libx264:使用H.264编码器,保证视频在绝大多数设备上兼容-crf 18:控制视频质量,数值越小质量越高(18-28是日常使用的最优范围)-pix_fmt yuv420p:设置通用像素格式,避免部分播放器无法解码-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2":如果原图尺寸不是2的倍数,会自动调整到最近的合规尺寸(比如1921x1081会变成1920x1080),但如果原图已经是2的倍数,这个滤镜不会改变任何尺寸,完美保留原图大小
简化命令(原图尺寸已是2的倍数)
如果你的JPG宽高都是偶数,直接用这个命令即可,完全不会裁剪:
ffmpeg -framerate 24 -loop 1 -i input.jpg -c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4
ImageMagick 实现方案
ImageMagick的操作更直观,但默认也可能会对图片做格式适配,我们需要明确指定尺寸参数来避免裁剪。
基础命令(保留尺寸 + 调整帧率)
convert -delay 10 input.jpg -loop 0 output.mp4
参数解释:
-delay 10:每帧的延迟时间,单位是1/100秒,所以-delay 10对应10fps;如果要24fps,计算方式是100/24≈4.17,取整写-delay 4即可-loop 0:设置视频无限循环(只播放一次就改成-loop 1)
强制保留尺寸的保险命令
如果担心ImageMagick自动调整尺寸,可以直接指定原图的宽高,或者强制按100%比例缩放:
# 方法1:指定原图精确尺寸(比如1920x1080) convert -size 1920x1080 -delay 10 input.jpg -loop 0 output.mp4 # 方法2:强制按原图100%缩放,不做任何调整 convert -delay 10 -resize "100%" input.jpg -loop 0 output.mp4
提升兼容性的优化
如果生成的MP4在部分设备上无法播放,可以指定H.264编码器:
convert -delay 10 input.jpg -loop 0 -video_codec libx264 output.mp4
内容的提问来源于stack exchange,提问作者Muhammad Kashif
相关产品推荐
相关产品推荐

