FFmpeg强制固定视频分辨率为1920×1080问题求助
解决FFmpeg强制输出1920×1080分辨率的问题
看了你的问题和命令,核心问题出在滤镜执行顺序以及没有明确强制忽略原视频的宽高比逻辑——你当前先叠加logo再缩放的操作,不仅会让logo被二次缩放,还会让FFmpeg默认保留原视频比例,导致输出宽度偏离1920。
修正后的命令
ffmpeg -y -i $name -i logo1080.png -c:a aac -b:a 256k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -r $FPSC -b:v 2400k -maxrate 2400k -bufsize 1200k -profile:v main -t $FDUR -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=disable,setsar=1:1[scaled];[scaled][1:v]overlay=main_w-overlay_w-10:10" format1080.mp4
关键修改点说明
- 调整滤镜顺序:先对主视频执行
scale缩放,再叠加logo。这样logo是基于已经固定为1920×1080的画面定位,不会被后续缩放变形,位置计算也更准确。 - 强制忽略原宽高比:添加
force_original_aspect_ratio=disable参数,彻底关闭FFmpeg自动保持原视频比例的逻辑,确保严格按照你指定的1920×1080尺寸缩放(这就是你之前得到1993×1080的核心原因)。 - 统一样本宽高比:加上
setsar=1:1,避免输入视频的非标准样本宽高比(SAR)干扰最终显示分辨率,保证输出的像素比例是标准1:1,对应1920×1080的HD规格。
额外优化建议
如果仍出现异常,可以在滤镜链末尾加上format=yuv420p,确保输出像素格式符合H.264的通用播放标准,避免部分播放器解析时的偏差:
ffmpeg -y -i $name -i logo1080.png -c:a aac -b:a 256k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -r $FPSC -b:v 2400k -maxrate 2400k -bufsize 1200k -profile:v main -t $FDUR -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=disable,setsar=1:1[scaled];[scaled][1:v]overlay=main_w-overlay_w-10:10,format=yuv420p" format1080.mp4
这样修改后,无论输入视频是什么分辨率,都会被强制转换为1920×1080的标准HD格式,叠加logo后输出稳定的目标文件。
内容的提问来源于stack exchange,提问作者Massimo Vantaggio
相关产品推荐
相关产品推荐

