android - 使用 1 :1 aspect ratio on Android 捕获视频

标签 android video ffmpeg crop mediarecorder

我正在尝试开发一个 Android 应用程序,该应用程序将使用 MediaRecorder 录制 15 秒 640x640 视频,使用 ffmpeg 提取所有帧,使用 gpuimage 应用一些艺术滤镜,然后使用 ffmpeg 将帧组合回视频。

我在录制分辨率为 640x640 的视频时遇到问题。 (Instagram android 应用程序执行此操作)

我尝试使用 MediaRecorder 的 setVideoSize(640, 640) 并且输出视频为 640x640,但视频看起来像一个 640x480 的视频,垂直拉伸(stretch)为 640x640。我想那是因为 640x640 不是设备支持的视频捕获分辨率列表返回的分辨率。有什么方法可以告诉媒体记录器在进行此类缩放时保持纵横比,以便我通过裁剪宽度而不是拉伸(stretch)高度来获得从 640x480 缩放到 640x640 的视频?

最佳答案

我最终以 640x480 捕获,将其裁剪为 480x480,同时使用 ffmpeg 分割成帧,最后当使用 ffmpeg 将帧组合回视频时,它被放大到 640x640。

String[] ffmpegCommand = {"/sdcard/frames/ffmpeg",
    "-i", "/sdcard/frames/test.3gp",
    "-vf", "crop=480:480:80:0,transpose=1",
    "-r", "30", "-an", "-qscale:v", "2", "-vsync", "1", "-threads", "4",  "/sdcard/frames/image%03d.jpg"};

应用程序在纵向模式下工作时需要 transpose=1。

注意:在捕获时,为了仅显示将包含在最终裁剪视频中的视频部分,我在预览显示顶部添加了两个 80 像素的黑条以隐藏两侧的 80 像素稍后被裁剪的视频。因此,用户可以得到他在预览中看到的内容。

关于android - 使用 1 :1 aspect ratio on Android 捕获视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350833/

相关文章:

安卓。 Firebase : Keystore file does not exist: ~/. android/debug.keystore

javascript - 我从 Youtube Data API 上传的视频在哪里?

python - 无法在 matplotlib : Windows permission denied 中保存动画

c - 使用 libavcodec、C 解码 H264 视频

android - 以编程方式将借记卡或信用卡添加到 Google 电子钱包

android - ScrollView 中的 ListView 在 Android 上不滚动

android - 最完整的 Cocos2d-x 教程和指南列表

ios - 如何在 ios swift 中将相机预览 View 添加到三个自定义 uiview

firefox - MP4 文件无法在 Firefox 中播放 - 有什么好的视频替代方案吗?

windows - FFmpeg Batch 同时遍历两个不同文件夹中的文件