如何用fluent-ffmpeg模拟object-fit: fill?当前代码更接近contain
解决fluent-ffmpeg模拟CSS object-fit:fill的问题
你的代码里scale=w=${1920}:h=${1080}之所以表现得像object-fit:contain,是因为ffmpeg的scale滤镜默认会保持原视频的宽高比,只会按比例缩放到不超过目标尺寸的大小,不会强制拉伸。
要模拟object-fit:fill(强制将视频拉伸到指定的1920x1080尺寸,完全忽略原比例),你需要修改scale滤镜的参数,禁用宽高比保持:
修改后的代码
ffmpeg(input) .output(output) .outputOptions("-vf", "scale=w=1920:h=1080:force_original_aspect_ratio=disable") .outputOptions("-c:a", "copy") .on("end", () => { console.log("Video conversion completed"); }) .on("error", error => { console.error("Video conversion failed:", error); }) .on("progress", function(f) { console.log("...frames ", f.frames); }) .run()
补充说明
如果你的原视频带有非1:1的样本宽高比(SAR),可能会导致拉伸后画面显示异常,这时可以在滤镜链里加上setsar=1来统一像素比例:
.outputOptions("-vf", "scale=w=1920:h=1080:force_original_aspect_ratio=disable,setsar=1")
这个参数会强制视频忽略原比例,直接拉伸到目标分辨率,和CSS里object-fit:fill的行为完全一致。
内容的提问来源于stack exchange,提问作者marvelMiles
相关产品推荐
相关产品推荐

