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

Flutter中如何读取Assets下的文本文件并传入FFmpeg命令

解决Flutter中Assets目录下mylist.txt传入FFmpeg的问题

Flutter的Assets文件打包在应用安装包内,FFmpeg无法直接访问该路径,必须先将Assets中的mylist.txt复制到设备本地可读写的目录(如应用临时目录),再用本地路径作为FFmpeg的输入。以下是具体实现步骤:

1. 添加依赖

确保pubspec.yaml中包含所需依赖:

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^2.0.15 # 用于获取本地可读写目录
  flutter_ffmpeg: ^0.4.0 # Flutter FFmpeg插件(根据实际使用的插件调整版本)

同时确认pubspec.yaml中已正确声明Assets:

flutter:
  assets:
    - assets/mylist.txt

2. 复制Assets文件到本地

编写工具函数将Assets中的mylist.txt复制到应用临时目录(无需额外权限):

import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';

Future<String> copyAssetMylistToLocal() async {
  // 读取Assets文件内容
  final String assetContent = await rootBundle.loadString('assets/mylist.txt');
  
  // 获取应用临时目录
  final Directory tempDir = await getTemporaryDirectory();
  final String localFilePath = '${tempDir.path}/mylist.txt';
  final File localFile = File(localFilePath);
  
  // 将内容写入本地文件
  await localFile.writeAsString(assetContent);
  
  return localFilePath;
}

3. 构建FFmpeg命令并执行

使用本地文件路径替换原Assets路径,构建并执行FFmpeg命令:

// 获取本地mylist.txt的绝对路径
final String localMylistPath = await copyAssetMylistToLocal();

// 构建FFmpeg命令(给路径加双引号,避免路径含空格导致报错)
final String commandToExecute =
    'ffmpeg -framerate 2 '
    '-f concat -i "$localMylistPath" -i ${AUDIO_PATH} -s 1080x1620 -y ${OUTPUT_PATH}';

// 执行FFmpeg命令(以flutter_ffmpeg插件为例)
final int result = await FlutterFFmpeg().execute(commandToExecute);
if (result == 0) {
  print('视频合成成功');
} else {
  print('视频合成失败,错误码:$result');
}

注意事项

  • 若mylist.txt中的图片路径指向外部存储,需确保应用已申请对应权限(如Android的READ_EXTERNAL_STORAGE,Android 13+需READ_MEDIA_IMAGES)。
  • 命令执行完成后,可根据需求删除临时目录下的mylist.txt以释放存储空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:35:24