首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CamcorderProfile捕捉慢动作视频

使用CamcorderProfile捕捉慢动作视频
EN

Stack Overflow用户
提问于 2016-01-31 16:25:45
回答 1查看 1.7K关注 0票数 10

我正试图在我的Nexus5x上捕捉慢动作视频。我是这样配置媒体记录器的:

代码语言:javascript
复制
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH);

mMediaRecorder = new MediaRecorder();

// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);

// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

// Step 3: Set the high speed CamcorderProfile
mMediaRecorder.setProfile(profile);

// Step 4: Set output file
// Step 5: Prepare media recorder
// Step 6: Capture video

问题是,捕获的视频不是我的设备支持的120 fps慢动作视频。他们是正常的29个fps视频。

我浏览了这个答案,它在正式文件中讨论了以下内容

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

我不明白的是,setProfile已经用从所选的CamcorderProfile派生的参数调用了两个方法setVideoFrameRate和setVideoEncodingBitRate。我为什么要再给他们打电话?我在这里错过了什么?

任何帮助都将不胜感激。为了我的生命,我不能让它起作用!

编辑:我尝试过像这样调用这些方法,但是它仍然捕获正常的速度视频:

代码语言:javascript
复制
mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4); 
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);

1/4由于CamcorderProfile.QUALITY_HIGH_SPEED_HIGH公布的帧率为120,我想要捕获一个30 fps的视频,如这里文档中所述。

公共int videoFrameRate 在API级别8中添加以每秒帧为单位的目标视频帧速率。 如果应用程序通过setProfile(CamcorderProfile)配置视频记录,而不指定任何其他MediaRecorder编码参数,则这是每秒录制的目标视频输出帧速率。例如,对于高速质量配置文件(从QUALITY_HIGH_SPEED_LOW到QUALITY_HIGH_SPEED_2160P),这是视频记录和播放的帧速率。如果应用程序打算创建具有高速质量配置文件的慢动作用例,则必须通过setVideoFrameRate(int)设置与期望的输出(回放)帧速率相对应的不同视频帧速率。例如,如果在QUALITY_HIGH_SPEED_720P中广告240 for,并且应用程序打算创建1/8因子的慢动作录制视频,应用程序必须通过setVideoFrameRate(Int)设置30 for。如果不这样做,将导致具有正常速度播放帧率的高速视频(上面的示例为240 for)。如果应用程序打算使用MediaCodec编码器进行视频记录,则必须按照此CamcorderProfile设置MediaFormat的每个单独字段。

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 12:08:44

代码语言:javascript
复制
mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW);

代码语言:javascript
复制
mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35116159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档