使用fluent-ffmpeg裁剪9:16视频遇滤镜初始化错误求助
错误原因与解决方案
错误原因
你设置的crop过滤器参数逻辑完全错误:
- FFmpeg的
crop过滤器语法为crop=width:height:x:y,其中width和height不能超过原视频的对应尺寸。 - 你写的
crop=ih*9/16:iw中,把裁剪高度设为了原视频宽度iw,这会导致裁剪高度远大于原视频实际高度(比如原视频是16:9横屏时,iw远大于ih),FFmpeg无法执行这种无效的裁剪操作,因此抛出错误。
解决方案
要裁剪出9:16的竖屏视频,需保证裁剪后的宽高比严格为9/16,且宽高不超过原视频尺寸。以下是两种可行实现方式:
方式1:修正crop过滤器参数
采用居中裁剪逻辑,确保裁剪区域符合9:16比例:
const cropFilter = 'crop=ih*9/16:ih:(iw - ih*9/16)/2:0';
参数说明:
ih*9/16:基于原视频高度计算出9:16比例的宽度ih:裁剪高度等于原视频高度(保证竖屏比例)(iw - ih*9/16)/2:水平方向居中偏移,让裁剪区域位于视频中间0:垂直方向从顶部开始(因裁剪高度等于原视频高度,无需垂直偏移)
方式2:使用fluent-ffmpeg内置crop方法(更直观)
fluent-ffmpeg提供了封装好的crop()方法,无需手动拼接过滤器字符串:
Ffmpeg(inputFilePath) .crop('ih*9/16', 'ih', '(iw - ih*9/16)/2', 0) .output(outputFilePath) .on('end', () => console.log('Cropping complete!')) .on('error', err => console.error('Error while cropping:', err.message)) .run();
完整修正代码
import ffmpegPath from "ffmpeg-static"; import Ffmpeg from "fluent-ffmpeg"; const inputFilePath = 'myfolder/video.mp4'; const outputFilePath = 'myfolder/video-cropped.mp4' if(ffmpegPath) { const cropFilter = 'crop=ih*9/16:ih:(iw - ih*9/16)/2:0'; Ffmpeg.setFfmpegPath(ffmpegPath); Ffmpeg(inputFilePath) .outputOptions(['-filter:v', cropFilter]) .output(outputFilePath) .on('end', () => console.log('Cropping complete!')) .on('error', err => console.error('Error while cropping:', err.message)) .run(); }
内容的提问来源于stack exchange,提问作者Clive
相关产品推荐
相关产品推荐

