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

Dart//Flutter 如何将静态图片与音频结合渲染为静态视频

音频+静态图片合成视频实现方案

方案1:使用ffmpeg_kit_flutter(推荐,无需手写平台代码)

你之前没有找到对应实现文档是因为这个需求本质是调用ffmpeg的通用命令,不需要库单独写针对性文档,实现非常简单:

  • 首先在pubspec.yaml中添加依赖:
    ffmpeg_kit_flutter: ^最新版本号
  • 核心逻辑直接调用封装好的ffmpeg命令即可,命令已经针对静态图片+音频的场景做了优化:
    import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart';
    import 'package:ffmpeg_kit_flutter/return_code.dart';
    
    Future<bool> generateVideoFromImageAndAudio(String imagePath, String audioPath, String outputPath) async {
      // 命令参数说明:
      // -tune stillimage:优化静态图片编码效率,减小输出体积
      // -shortest:自动匹配音频时长,视频长度和音频完全一致
      final ffmpegCommand = '-i "$imagePath" -i "$audioPath" -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest "$outputPath"';
      
      final session = await FFmpegKit.execute(ffmpegCommand);
      final returnCode = await session.getReturnCode();
      return ReturnCode.isSuccess(returnCode);
    }
    
  • 该方案所有底层平台适配都由ffmpeg_kit_flutter完成,你只需要写Dart层代码即可,不需要手写iOS/Android等平台的特定代码,编码效率高,兼容性好,适合绝大多数场景。

方案2:纯Dart实现(无原生依赖)

如果完全不想引入原生封装的ffmpeg依赖,也可以用纯Dart生态的库实现,不过性能和兼容性稍差:

  • 依赖两个纯Dart库:image(用于解码静态图片)、video_encoder(用于纯Dart侧编码视频)
  • 实现逻辑:首先用image库解码得到静态图片的RGBA像素数据,然后按照你需要的帧率(如30fps)重复写入相同的像素帧到视频轨道,同时写入音频数据到音频轨道,最终封装为MP4文件输出
  • 缺点:编码速度比ffmpeg慢30%以上,大时长音频处理容易卡顿,部分特殊音频格式兼容性不好,仅适合轻量场景使用。

注意:不管用哪种方案,都需要提前申请对应平台的存储读写权限,才能正常读取输入文件、写入输出视频到本地存储。

内容的提问来源于stack exchange,提问作者Raz Gino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:06:07