在Flutter中给视频添加水印主要有以下几种方案:
1. 使用 video_processing + FFmpeg
import 'package:video_processing/video_processing.dart';
Future<void> addWatermarkToVideo() async {
final video = Video('/path/to/input.mp4');
// 创建水印滤镜
final filter = FilterComposition()
..addSource(video)
..addOverlay(
OverlaySource.image(
'/path/to/watermark.png',
position: OverlayPosition.topRight,
margin: EdgeInsets.all(10),
),
);
await video.applyFilter(filter);
await video.export('/path/to/output.mp4');
}
2. 使用 ffmpeg_kit_flutter
import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart';
Future<void> addWatermarkWithFFmpeg() async {
String command = '-i input.mp4 -i watermark.png ' +
'-filter_complex "[0:v][1:v] overlay=W-w-10:10" ' +
'-codec:a copy output.mp4';
await FFmpegKit.execute(command);
}
3. 使用 camera 和 video_player 实时添加
import 'package:camera/camera.dart';
import 'package:video_player/video_player.dart';
class VideoRecorderWithWatermark {
CameraController? _controller;
Future<void> startRecording() async {
await _controller?.startVideoRecording();
// 在预览界面叠加水印Widget
Stack(
children: [
CameraPreview(_controller!),
Positioned(
top: 20,
right: 20,
child: Image.asset(
'assets/watermark.png',
width: 100,
height: 40,
),
),
],
);
}
}
推荐方案
对于已存在的视频文件,推荐使用 ffmpeg_kit_flutter,因为它功能强大且性能优秀。对于实时录制场景,可以使用 camera 包在预览界面叠加水印。
主要步骤:
- 添加依赖到 pubspec.yaml
- 准备水印图片
- 配置叠加位置和参数
- 执行处理命令
需要根据具体需求选择合适的方法,并注意处理文件路径和权限问题。