使用ffmpeg_kit_flutter在iOS添加drawtext滤镜报错:No such filter: 'drawtext'
解决ffmpeg_kit_flutter中drawtext滤镜提示“No such filter: 'drawtext'”的问题
问题描述
使用ffmpeg_kit_flutter为视频添加drawtext滤镜时,出现错误提示:No such filter: 'drawtext'。本地直接执行以下FFmpeg命令可正常运行:
ffmpeg -y -i input.mp4 -filter_complex '[0]scale=540:-1[s];[s]drawtext=text='your_text_here':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2' output.mp4
用户的Flutter代码示例:
/// 给视频添加文本 Future<void> createVideoWithText() async { final file = File('${(await getTemporaryDirectory()).path}/output.mp4'); String outPut = file.path; String command = "-y -i $inputFilePath -filter_complex '[0]scale=540:-1[s];[s]drawtext=text='MY_TEXT':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2' $outPut"; FFmpegKit.executeAsync( command, (session) async { final returnCode = await session.getReturnCode(); if (ReturnCode.isSuccess(returnCode)) { print('视频添加文本成功'); } else { print('视频添加文本失败'); } }, ); }
核心原因
ffmpeg_kit_flutter默认提供的min版本包不包含drawtext这类高级滤镜,该滤镜属于FFmpeg的文本处理组件,仅在full版本包中提供。
解决方案
1. 替换为full版本依赖
在pubspec.yaml中,将原有的ffmpeg_kit_flutter依赖替换为完整版本:
dependencies: ffmpeg_kit_flutter_full: ^5.1.0 # 请使用最新版本号
执行flutter pub get更新依赖。
2. 修正命令中的引号冲突
代码中命令的文本参数存在引号解析问题,text='MY_TEXT'的单引号会与外层双引号冲突,导致FFmpeg无法正确解析滤镜参数。修改命令为:
// 使用转义双引号包裹文本内容 String command = "-y -i $inputFilePath -filter_complex '[0]scale=540:-1[s];[s]drawtext=text=\"MY_TEXT\":fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2' $outPut";
或者改用单引号包裹整个命令,内部用单引号:
String command = '-y -i $inputFilePath -filter_complex "[0]scale=540:-1[s];[s]drawtext=text=\'MY_TEXT\':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2" $outPut';
3. 清理缓存并重新构建
执行以下命令确保依赖生效:
flutter clean flutter run
验证
完成上述步骤后,重新调用createVideoWithText方法,即可正常为视频添加文本水印。
内容的提问来源于stack exchange,提问作者Patel Milan
相关产品推荐
相关产品推荐

