在Android上以1:1的宽高比捕获视频

Nik*_*hew 7 video android ffmpeg crop mediarecorder

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

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

我尝试使用MediaRecorder的setVideoSize(640,640),输出视频为640x640,但视频看起来像垂直延伸的640x480视频,使其为640x640.我猜这是因为640x640不是设备支持的视频捕获分辨率列表返回的分辨率.是否有任何方法告诉媒体记录器在进行这样的缩放时保持纵横比,这样我就可以通过裁剪宽度而不是高度拉伸来获得从640x480到640x640缩放的视频?

Nik*_*hew 4

我最终以 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"};
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你可以提供更多信息/代码等,我正在解决同样的问题 (3认同)