Flutter中实现正方形视频录制的技术咨询
实现Flutter相机录制正方形视频的方案
当然可以通过配置相机参数实现正方形视频输出!你之前的代码只是把预览画面裁剪成了正方形,但相机实际录制的还是默认的矩形分辨率,所以导出的视频自然还是矩形。下面是具体的解决步骤:
1. 优先选择相机硬件支持的正方形分辨率
大多数现代相机硬件都支持1:1的正方形分辨率(比如1080x1080、720x720),我们可以在初始化相机控制器时指定这个分辨率,让相机直接录制正方形的视频流。
代码示例:筛选并使用正方形分辨率
import 'package:camera/camera.dart'; // 在初始化相机的异步方法中 Future<void> initCamera() async { // 获取设备上的可用相机 final cameras = await availableCameras(); final targetCamera = cameras.first; // 可根据需求切换前置/后置相机 // 筛选出所有宽高比为1:1的分辨率 final squareResolutions = targetCamera.resolutions .where((res) => res.width == res.height) .toList(); CameraResolution selectedResolution; if (squareResolutions.isNotEmpty) { // 选择分辨率最高的正方形选项(也可根据需求选其他) selectedResolution = squareResolutions.reduce( (a, b) => a.width > b.width ? a : b, ); } else { // 如果没有原生正方形分辨率,退而求其次选最接近1:1的(或后续做裁剪处理) selectedResolution = targetCamera.resolutions.first; print("当前相机不支持原生正方形分辨率,将使用默认分辨率后续裁剪"); } // 初始化相机控制器,指定正方形分辨率 _controller = CameraController( targetCamera, selectedResolution, enableAudio: true, // 根据需求开启/关闭音频 ); await _controller.initialize(); // 刷新UI setState(() {}); }
2. 简化预览布局
因为现在相机的预览分辨率本身就是正方形的,你之前的复杂预览布局可以大幅简化,直接使用CameraPreview即可:
@override Widget build(BuildContext context) { if (!_controller.value.isInitialized) { return const Center(child: CircularProgressIndicator()); } final size = MediaQuery.of(context).size.width; return Container( width: size, height: size, child: CameraPreview(_controller), ); }
3. 无原生正方形分辨率时的 fallback 方案
如果目标设备相机不支持原生1:1分辨率,那只能先录制矩形视频,再通过视频裁剪工具转为正方形。可以使用flutter_ffmpeg这类库来处理,示例代码如下(仅作参考):
import 'package:flutter_ffmpeg/flutter_ffmpeg.dart'; // 录制完成后裁剪视频为正方形 Future<void> cropVideoToSquare(String inputPath, String outputPath) async { final flutterFFmpeg = FlutterFFmpeg(); // FFmpeg命令:裁剪画面中心区域为正方形 final command = "-i $inputPath -vf crop=min(iw\,ih):min(iw\,ih) $outputPath"; final result = await flutterFFmpeg.execute(command); if (result == 0) { print("视频裁剪成功"); } else { print("视频裁剪失败,错误码:$result"); } }
这种方式会增加额外的处理时间和性能消耗,所以优先推荐使用硬件原生支持的正方形分辨率方案。
内容的提问来源于stack exchange,提问作者Alessio
相关产品推荐
相关产品推荐

