Android捕捉慢动作视频

And*_*per 13 android android-camera android-mediarecorder slowmotion

如何在我的应用中捕捉慢动作视频?

我试过用

 mMediaRecorder.setVideoFrameRate(100);
Run Code Online (Sandbox Code Playgroud)

但如果我将值设置为20或更多,应用程序崩溃IllegalStateException.

我已经研究了很多.正常视频在24到30 fps之间.要看慢动作视频,我们需要捕获100-120 fps,但设备不允许这样.但是我看到设备中的默认摄像头有一个慢动作选项.游戏商店中的应用程序也很少允许创建慢动作视频.我也尝试设置更高setCaptureRate(),但也可以拍摄普通模式视频.在少数几个地方提到慢动作电影可以通过OpenCV/JavaCV图书馆完成,但我不明白如何使用这些库来捕获android中的慢动作视频?

Bon*_*tti 11

从您提供的来源(CamcorderProfile),您所要做的就是每秒增加拍摄的图像:

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW);
Run Code Online (Sandbox Code Playgroud)

要么

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH);
Run Code Online (Sandbox Code Playgroud)

因此,如果您每秒拍摄100张图像,并且每秒显示25帧,则记录的第二帧需要4秒才能显示

请阅读您正在使用的课程的文档:

public static final int QUALITY_HIGH_SPEED_LOW

高速(> = 100fps)质量等级,对应于最低可用分辨率.

对于下面定义的所有高速配置文件((从QUALITY_HIGH_SPEED_LOW到QUALITY_HIGH_SPEED_2160P),它们与正常录制配置文件类似,只有更高的输出帧速率和比特率.因此,使用setProfile(CamcorderProfile)设置这些配置文件而不指定任何其他编码参数将生成高速视频,而不是具有不同捕获和输出(回放)帧速率的慢动作视频.要记录慢动作视频,应用程序必须通过setVideoFrameRate(int)和setVideoEncodingBitRate适当地设置视频输出(回放)帧速率和比特率. (int)基于慢动作因子.如果应用程序打算使用MediaCodec编码器进行视频录制,则必须根据此CamcorderProfile类似地设置MediaFormat的每个单独字段.


Nav*_*een -2

试试这个代码。它会有所帮助...

myCamera = getCameraInstance();
mediaRecorder = new MediaRecorder();
myCamera.unlock();
mediaRecorder.setCamera(myCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface());
Run Code Online (Sandbox Code Playgroud)

  • 为什么有人对这个答案投赞成票,而它与问题完全无关?如果我发布一个非常好的布丁食谱的答案怎么办……这也会得到投票吗? (4认同)