私の Android デバイスでは、次の 2 つの方法のいずれかで動画を撮影できます。
1) カメラを利用し、機能を直接制御できるようにするカスタム クラス/メソッドのセットを作成できます。
また
2) インテントを使用してビデオを開き、録画を行うことができます。
この質問は後者に関するものです(インテントを使用)。これは、ビデオを撮るために使用しているインテント コードです。
private void takeVideo(Activity activity, Context context){
//Actual intent used to capture the video
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//30 Second time limit (can make it anything, just using 30 here)
takeVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 30);
//Utility method I have for generating a uri to use for the video
android.net.Uri myUri = generateVideoUri(context);
//Uri to use
takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, myUri);
//Cap it at 20mb
takeVideoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 20000000L);
//HERE IS WHERE MY QUESTION LIES //0 is low, 1 is high
takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
activity.startActivityForResult(takeVideoIntent, 100);
}
上記のコードは問題なく動作します。私の質問は品質に関するものです。
品質として 0 を送信すると、まったくひどい品質になります (IE、10 秒のビデオは約 0.3 MB で、電話が処理できる最低の品質のようです)。品質として 1 を送信すると、信じられないほど大きくて扱いにくくなります (IE、10 秒のビデオは約 50MB です)。
一部の電話メーカーは送信されたインテント エクストラを無視することに注意してください。アップロードやメッセージなどに使用する中品質のビデオを取得するにはどうすればよいですか?
- 大きなファイルに対して何らかの圧縮を実行する必要がありますか?
- これは、カスタム ビデオ/カメラ クラスを介してのみ行うことができますか?
- 私が考えていない他の方法はありますか?
大きすぎるか小さすぎるという両極端ではなく、「中品質」のビデオを取得するにはどうすればよいでしょうか?
皆さんありがとう!