You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:17:19