如何设置MediaRecorder以获得最佳视频质量效果?

Viv*_*ian 14 java encoding camera android

伙计们有人可以告诉我如何设置参数MediaRecorder以便通过编码获得最佳视频录制效果而不考虑手机的物理限制?或者是否有任何影响我的编码引起的小失真MediaRecorder

如果你们中的一些人可能猜测不清楚的参数,我实际上是使用偏好设置一些参数.我想念的参数有哪些可能有助于改善视频编码过程Ex:framerate

Jul*_*lon 37

您可能希望使用现有配置文件,具体取决于API级别.

没有档案:

recorder.setVideoSize(640, 480);
recorder.setVideoFrameRate(16); //might be auto-determined due to lighting
recorder.setVideoEncodingBitRate(3000000);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// MPEG_4_SP
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想使用现有的配置文件

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(cpHigh);
Run Code Online (Sandbox Code Playgroud)

请注意,您不能同时拥有这两个选项,因为您将收到错误或您的准备工作无效

由于并非所有的Android API和/或设备都支持相同的值,因此您必须查询每台设备的最大值或查找适用于所有设备的内容.

  • 注意:你必须删除`setOutputFormat()`、`setVideoEncodingBitRate()`、`setAudioEncodingBitRate()`、`setVideoEncoder()`、`setAudioEncoder()`、`setAudioSamplingRate()`、`setVideoFrameRate()` (2认同)

div*_*i09 6

虽然这个问题很老,但我想指出我用来录制高清质量视频的组合。

使用下面的代码组合来实现高清质量的视频。

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);                    
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                        
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);                        
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);                    
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);                    
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);                    
mMediaRecorder.setVideoEncodingBitRate(cpHigh.videoBitRate);                    
mMediaRecorder.setVideoFrameRate(cpHigh.videoFrameRate);
int rotation = mWindowManager.getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mMediaRecorder.setOrientationHint(orientation);
Run Code Online (Sandbox Code Playgroud)

使用以下代码获取 DISPLAY_HEIGHT,DISPLAY_WIDTH

DisplayMetrics metrics = new DisplayMetrics();      
mWindowManager.getDefaultDisplay().getMetrics(metrics);          
DISPLAY_WIDTH = metrics.widthPixels;
DISPLAY_HEIGHT = metrics.heightPixels;
Run Code Online (Sandbox Code Playgroud)

定义 ORIENTATIONS,如下所示

public static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
    ORIENTATIONS.append(Surface.ROTATION_0, 90);
    ORIENTATIONS.append(Surface.ROTATION_90, 0);
    ORIENTATIONS.append(Surface.ROTATION_180, 270);
    ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。