【问题标题】:Capturing Video with 1:1 aspect ratio on Android在 Android 上以 1:1 的纵横比捕获视频
【发布时间】:2013-12-19 11:47:36
【问题描述】:

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

我在录制分辨率为 640x640 的视频时遇到问题。 (Instagram android 应用程序会这样做)

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

【问题讨论】:

  • 我目前的替代方法是以 640x480 录制视频,提取帧并将每帧裁剪为 480x480,方法是从左右下降 80 个像素,然后将每帧放大到 640x640。但这是一个耗时的过程,如果无论如何我可以告诉 MediaRecorder 在以自定义分辨率视频捕获时保持纵横比,用户必须等待的时间会大大缩短。
  • 我的MediaRecorder设置如下:mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setVideoEncoder(VideoEncoder.H264); mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory().getPath()+‌​"/test.3gp"); mediaRecorder.setMaxDuration(15000); mediaRecorder.setMaxFileSize(50000000); mediaRecorder.setVideoSize(640, 640); mediaRecorder.setVideoFrameRate(30); mediaRecorder.setVideoEncodingBitRate(3000000);
  • 还有我用来从视频中提取帧的 ffmpeg 命令:String[] ffmpegCommand = {"ffmpeg", "-i", "test.3gp","-r", "30", "-an", "-s", "640x640", "-qscale:v", "2", "-vsync", "1", "-threads", "4", frame%03d.jpg"};
  • 奇怪的是,ffmpeg 中的crop+scale 在你还要面对解码、艺术滤镜和重新编码的时候,意义重大。除非您使用硬件编码器。您可以考虑替代方案 - 接收预览帧(640x480,或者如果您的相机支持,则可能是 800x600),裁剪和应用过滤器以及编码 - 所有这些都是实时的。
  • 这里是实现FPS不比MediaRecorder差的方法:stackoverflow.com/a/19924579/192373

标签: android video ffmpeg crop mediarecorder


【解决方案1】:

我最终以 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 像素后来被裁剪的视频。所以用户得到了他在预览中看到的内容。

【讨论】:

  • 你能提供更多信息/代码等吗,我正在处理同样的问题
  • @MuhammadUmar 和 Nikhil 你能指导我解决这个问题吗?
猜你喜欢
  • 2013-03-22
  • 2020-01-26
  • 1970-01-01
  • 2013-06-14
  • 2015-02-09
  • 2019-09-04
  • 2020-06-02
  • 2017-03-20
  • 2018-07-19
相关资源
最近更新 更多