为什么使用FFmpeg将PNG序列合成视频后尺寸出现异常变化?
问题原因
你遇到的高度缩减问题是libx264编码器的像素格式对齐要求导致的:
- libx264默认使用YUV 4:2:0像素格式,该格式下色度通道的分辨率是亮度通道的1/2,要求视频宽高都必须为偶数
- 部分编码预设会额外要求宽高对齐到8的整数倍,你的目标高度540无法被8整除,ffmpeg会自动将高度向下调整到最近的符合要求的数值536,因此最终输出高度少了4像素。
解决方法
场景1:必须严格保留928x540的输出尺寸
可以指定编码器使用不需要宽高对齐的YUV 4:4:4像素格式,调整后的命令如下:
ffmpeg -y -r 25 -start_number 0 -i frame%d.png -vf scale=928:540 -c:v libx264 -crf 0 -pix_fmt yuv444p out.mp4
注意:YUV 4:4:4格式的视频兼容性略差,部分老旧播放器可能无法正常播放。
场景2:需要兼容通用播放器(保留YUV 4:2:0格式)
你可以选择两种处理方式:
- 用pad滤镜补全高度到符合对齐要求的544,上下各加2像素黑边,内容无裁剪:
ffmpeg -y -r 25 -start_number 0 -i frame%d.png -vf "scale=-1:540,pad=width=928:height=544:x=0:y=2:color=black" -c:v libx264 -crf 0 out.mp4
- 强制scale滤镜仅对齐到2的倍数,不需要对齐到8,直接输出928x540的YUV 4:2:0视频:
ffmpeg -y -r 25 -start_number 0 -i frame%d.png -vf scale=-1:540:force_divisible_by=2 -c:v libx264 -crf 0 out.mp4
内容的提问来源于stack exchange,提问作者user14595603
相关产品推荐
相关产品推荐

