Flutter video_player修改播放速度后如何获取修改信息并保存视频?
问题描述
想用Flutter的video_player包修改视频播放速度并保存到相册,已通过controller.setPlaybackSpeed()方法成功调整播放速度,但找不到获取修改后视频信息的方式,尝试过controller.dataSource和controller.value属性均无相关内容。代码示例:
Slider( value: blur, min: 1, max: 5, onChanged: (value) { setState(() { blur = value; _controller.setPlaybackSpeed(blur); }); },) ,
解决方案
首先明确:video_player仅负责播放控制,不会修改原视频文件,setPlaybackSpeed()只是改变播放时的速率,并没有生成新的视频文件,所以从controller里拿不到“修改后的视频信息”。
要实现变速后保存视频到相册,需分两步:
- 记录你设置的播放速度值(比如代码里的
blur变量) - 用视频处理库对原视频进行变速编码,生成新文件后再保存到相册
具体实现方案
- 用
flutter_ffmpeg处理视频变速:这是FFmpeg的Flutter封装,通过命令行完成视频变速(支持音视频同步)。示例代码:
// 替换为你的原视频路径和输出路径 final inputPath = "/path/to/your/original/video.mp4"; final outputPath = "/path/to/save/modified/video.mp4"; // 计算变速参数:视频setpts是1/速度,音频atempo是速度值 final arguments = '-i $inputPath -filter_complex "[0:v]setpts=${1/blur}*PTS[v];[0:a]atempo=$blur[a]" -map "[v]" -map "[a]" $outputPath'; // 执行处理 await FlutterFFmpeg().execute(arguments);
- 用
gallery_saver保存到相册:处理完成后,将生成的视频文件保存到系统相册:
await GallerySaver.saveVideo(outputPath);
注意事项
- 需在Android和iOS配置文件中添加对应权限(存储访问、文件读写等)
- FFmpeg命令可按需调整,比如无需音频可去掉音频相关过滤链
- 视频处理是耗时操作,建议放在异步任务中执行,并添加加载提示
内容的提问来源于stack exchange,提问作者selman altınbaş
相关产品推荐
相关产品推荐

