【问题标题】:Android: Modifying recorded video qualityAndroid:修改录制的视频质量
【发布时间】:2018-01-30 21:24:04
【问题描述】:

我正在使用 MediaRecorder 录制视频。假设视频的大小保持不变,我不清楚应该使用哪些参数来改变图像的质量。例如,我想始终创建一个 640x480 mp4 视频。我可以调整哪些参数来提高或降低质量?

【问题讨论】:

    标签: android video


    【解决方案1】:

    你可以试试

    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);
    

     CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
     recorder.setProfile(cpHigh);
    

    设置高质量和低质量参数见here

    【讨论】:

    • 不,我不能使用它。我必须使用 setVideoEncoder 手动设置视频。我相信还有其他参数可以让您指定特定值,例如 fps 等。不过,不确定要设置哪些参数。
    • 我也遇到了。该帖子说,尽管它会因设备而异,这意味着查询功能。这可能是唯一的方法。 FrameRate 和 BitRate 是我应该处理的唯一参数吗?
    • 经过实验,设置FrameRate似乎没有任何明显的区别。但是,比特率确实如此。将其设置为 300000 确实可以创建更高质量的视频(当然,以文件大小为代价)。您是否知道任何可用于确定设备支持的最大比特率的 API?
    • 我不太了解 API。也检查一下.. developer.android.com/guide/appendix/…
    【解决方案2】:

    试试这个你可以解决问题

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    
    String path = Environment.getExternalStorageDirectory() + "/file.mp4";
    mediaRecorder.setOutputFile(path);
    

    【讨论】:

    • 使用 H264 的质量是否比 MP4 更高?
    • setProfile 实际上会生成一个 IllegalStateException。花了一天时间后,我一直没有使用内置配置文件,但几乎什么也没看到,但使用它时经常出现异常。
    • 只需注释这两行 setprofile 并给出与所示相同的参数。你会得到高质量的视频
    • 这基本上就是我现在正在做的,除了视频编码器设置为 MPEG_4_SP。我尝试了H264,但是开始录制时会出现异常。似乎并非所有相机都支持 H264。无论如何,手动设置比特率似乎是要走的路。现在只要我能弄清楚如何查询设备支持的最大速率。
    • 你目前使用的是哪个版本,我的意思是 2.2 还是其他版本??
    【解决方案3】:

    使用setVideoEncodingBitRate() in MediaRecorder,您必须提高视频编码比特率以提高视频质量。

    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    

    mRecorder.setVideoEncodingBitRate(4000000);`

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2019-06-25
      相关资源
      最近更新 更多