You need to enable JavaScript to run this app. Flutter使用flutter_ffmpeg获取.m4b有声书章节数据的变量读取方法
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用flutter_ffmpeg获取.m4b有声书章节数据的变量读取方法

方法1:直接读取ffmpeg命令输出(无需抓取控制台日志,推荐)

你当前执行的命令本身会把章节JSON输出到标准输出流,flutter_ffmpeg官方已经提供了直接获取该输出的接口,直接调用即可拿到JSON字符串转成变量使用,示例代码如下:

import 'dart:convert';
import 'package:flutter_ffmpeg/flutter_ffmpeg.dart';

final FlutterFFmpeg _flutterFFmpeg = FlutterFFmpeg();

// 异步执行ffmpeg命令
int returnCode = await _flutterFFmpeg.executeWithArguments([
  '-i', 
  widget.book.path, 
  '-print_format', 
  'json', 
  '-show_chapters', 
  '-loglevel', 
  'error'
]);

// 命令执行成功的情况
if (returnCode == 0) {
  // 直接获取命令输出的完整内容
  String? ffmpegOutput = await _flutterFFmpeg.getLastOutput();
  if (ffmpegOutput != null) {
    // 把JSON字符串解析为Dart对象直接使用
    Map<String, dynamic> result = jsonDecode(ffmpegOutput);
    List<dynamic> chapterList = result['chapters'] ?? [];
    // 此处可直接对chapterList做业务逻辑处理
  }
}

你当前已经加了-loglevel error参数,会过滤掉所有无关日志,输出内容只有纯净的章节JSON,不需要额外做内容清理就能直接解析。


方法2:使用新版维护分支FFmpegKit

原flutter_ffmpeg包已经停止维护,官方已经迁移到ffmpeg_kit_flutter包,该包获取输出的逻辑更清晰,示例如下:

import 'dart:convert';
import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart';

FFmpegKit.executeWithArguments([
  '-i', 
  widget.book.path, 
  '-print_format', 
  'json', 
  '-show_chapters', 
  '-loglevel', 
  'error'
]).then((session) async {
  final returnCode = await session.getReturnCode();
  if (returnCode?.isValueSuccess() == true) {
    final output = await session.getOutput();
    Map<String, dynamic> result = jsonDecode(output!);
    List<dynamic> chapterList = result['chapters'] ?? [];
  }
});

注意事项
  • 注意处理returnCode非0的异常场景,比如文件读取权限不足、源文件损坏的情况,避免解析空内容崩溃
  • 不需要额外监听系统控制台日志,官方提供的输出接口已经能拿到完整的命令执行结果

内容的提问来源于stack exchange,提问作者Vlad-Sebastian Cretu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:15:04