Flutter视频编辑插件video_edit_factory的使用

Flutter视频编辑插件video_edit_factory的使用

基于ffmpeg_kit_flutter的二次封装,每次都手动输命令真的很难受。

源码

https://github.com/xiaojieonly/Flutter_Video_Edit_Factory

示例代码

import 'package:flutter/material.dart';
import 'package:video_edit_factory/video_edit_factory.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Flutter视频编辑插件video_edit_factory示例"),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              videoEdit();
            },
            child: Text("开始视频编辑"),
          ),
        ),
      ),
    );
  }
}

void videoEdit() {
  // 初始化VideoEditFactory对象,并设置输入视频路径
  VideoEditFactory videoEditFactory = new VideoEditFactory(
      inputPath: 'The directory of the target video file to be edited');

  // 获取媒体文件信息
  videoEditFactory.getMediaInfo(executeCallback: (Session session) {
    MediaInformationSession mediaInformationSession =
        session as MediaInformationSession;

    MediaInformation? mediaInformation =
        mediaInformationSession.getMediaInformation();
  });

  File previewImage;
  // 获取视频第一帧图片
  videoEditFactory.videoPreviewImage(executeCallback: (Session session) async {
    await videoEditFactory
        .getVideoPreviewImage(session)
        .then((value) => previewImage = value);
  });

  videoEditFactory
    // 设置视频比特率
    ..setBitRate(5)
    // 设置视频帧数
    ..setOutPutFPS(24)
    // 设置输出文件的大小
    ..setOutputVideoSize(54)
    // 设置输出格式
    ..setType('mp4')
    // 剪切视频指定区间(单位:秒)
    ..cutByTime(0, 20)
    // 设置输出文件的宽高
    ..setOutputVideoSale(1080, 1920)
    // 设置超时时间(仅限获取文件信息时生效)
    ..setTimeOut(123)
    // 设置输出文件名称
    ..setOutputName('output_file_name')
    // 设置文件的输出目录
    ..setOutputPath('the_output_directory_of_the_file')
    // 添加水印(图片文件,水印位置)
    ..setPictureWatermark(File('image_path'), VideoOffset.topLeft());

  File videoFile;
  // 执行视频编辑命令
  videoEditFactory.executeAsync(executeCallback: (Session session) async {
    // 获取输出文件
    await videoEditFactory
        .getOutputFile(session)
        .then((value) => videoFile = value);
  });
}

说明

  1. 初始化:

    VideoEditFactory videoEditFactory = new VideoEditFactory(
        inputPath: 'The directory of the target video file to be edited');
    

    这里创建了一个VideoEditFactory对象,并设置了要处理的视频文件路径。

  2. 获取媒体文件信息:

    videoEditFactory.getMediaInfo(executeCallback: (Session session) {
      MediaInformationSession mediaInformationSession =
          session as MediaInformationSession;
    
      MediaInformation? mediaInformation =
          mediaInformationSession.getMediaInformation();
    });
    

    使用getMediaInfo方法获取媒体文件的信息。

  3. 获取视频第一帧图片:

    videoEditFactory.videoPreviewImage(executeCallback: (Session session) async {
      await videoEditFactory
          .getVideoPreviewImage(session)
          .then((value) => previewImage = value);
    });
    

    使用videoPreviewImage方法获取视频的第一帧图像。

  4. 设置视频参数:

    videoEditFactory
      ..setBitRate(5)
      ..setOutPutFPS(24)
      ..setOutputVideoSize(54)
      ..setType('mp4')
      ..cutByTime(0, 20)
      ..setOutputVideoSale(1080, 1920)
      ..setTimeOut(123)
      ..setOutputName('output_file_name')
      ..setOutputPath('the_output_directory_of_the_file')
      ..setPictureWatermark(File('image_path'), VideoOffset.topLeft());
    

    使用一系列方法来设置视频编辑的参数,如比特率、帧数、输出格式等。

  5. 执行视频编辑命令:

    videoEditFactory.executeAsync(executeCallback: (Session session) async {
      await videoEditFactory
          .getOutputFile(session)
          .then((value) => videoFile = value);
    });
    

更多关于Flutter视频编辑插件video_edit_factory的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频编辑插件video_edit_factory的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用video_edit_factory插件进行视频编辑的示例代码。请注意,video_edit_factory插件的具体API和功能可能会随着版本更新而有所变化,因此请参考官方文档以获取最新信息。

首先,确保在你的pubspec.yaml文件中添加了video_edit_factory依赖:

dependencies:
  flutter:
    sdk: flutter
  video_edit_factory: ^最新版本号  # 替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

以下是一个简单的示例,展示了如何使用video_edit_factory插件进行视频剪辑和拼接:

import 'package:flutter/material.dart';
import 'package:video_edit_factory/video_edit_factory.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VideoEditScreen(),
    );
  }
}

class VideoEditScreen extends StatefulWidget {
  @override
  _VideoEditScreenState createState() => _VideoEditScreenState();
}

class _VideoEditScreenState extends State<VideoEditScreen> {
  final VideoEditFactory _videoEditFactory = VideoEditFactory();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Edit Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _editVideo,
          child: Text('Edit Video'),
        ),
      ),
    );
  }

  Future<void> _editVideo() async {
    try {
      // 假设我们有两个视频路径
      final String videoPath1 = 'path/to/your/first/video.mp4';
      final String videoPath2 = 'path/to/your/second/video.mp4';

      // 创建剪辑对象
      final Clip clip1 = Clip(
        sourcePath: videoPath1,
        startTime: 0.0,  // 开始时间(秒)
        endTime: 5.0,    // 结束时间(秒),这里剪辑前5秒
      );

      final Clip clip2 = Clip(
        sourcePath: videoPath2,
        startTime: 0.0,  // 开始时间(秒)
        endTime: 10.0,   // 结束时间(秒),这里剪辑前10秒
      );

      // 创建剪辑列表
      final List<Clip> clips = [clip1, clip2];

      // 设置输出配置
      final OutputConfig outputConfig = OutputConfig(
        outputPath: 'path/to/your/output/video.mp4',
        codec: Codec.h264,
        bitRate: 1500000,  // 比特率(bps)
        frameRate: 30.0,   // 帧率
        width: 1280,       // 输出宽度
        height: 720,       // 输出高度
      );

      // 开始编辑视频
      final Result result = await _videoEditFactory.edit(
        clips: clips,
        outputConfig: outputConfig,
      );

      if (result.isSuccess) {
        print('Video editing succeeded!');
      } else {
        print('Video editing failed: ${result.error}');
      }
    } catch (e) {
      print('Error: $e');
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当点击按钮时,将调用_editVideo函数进行视频编辑。该函数定义了两个视频剪辑,每个剪辑都指定了源视频路径、开始时间和结束时间。然后,将这些剪辑添加到列表中,并设置输出配置(如输出路径、编解码器、比特率、帧率和分辨率)。最后,调用_videoEditFactory.edit方法开始视频编辑。

请注意,path/to/your/first/video.mp4path/to/your/second/video.mp4应替换为实际的视频文件路径,输出路径也应为有效的文件路径。

这个示例仅展示了基本的视频剪辑和拼接功能。video_edit_factory插件还支持更多高级功能,如添加音频、添加水印、调整视频速度等。请参考官方文档以了解所有可用功能和API。

回到顶部