Explicación de las propiedades de JavaCV FFmpegFrameRecorder necesaria

Estoy usandoFFmpegFrameRecorder para obtener la entrada de video de mi cámara web y grabarla en un archivo de video. El problema es que estoy creando mi aplicación utilizando unos pocos códigos fuente de demostración diferentes que encontré y uso propiedades que no me parecen completamente claras.

Primero, aquí está mi fragmento de código:

FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(FILENAME,  grabber.getImageWidth(),grabber.getImageHeight());

        recorder.setVideoCodec(13);
        recorder.setFormat("mp4");
        recorder.setPixelFormat(avutil.PIX_FMT_YUV420P);
        recorder.setFrameRate(30);
        recorder.setVideoBitrate(10 * 1024 * 1024);

        recorder.start();
setVideoCodec (13) - Cuál es el significado de este(13) ¿Cómo puedo entender qué códec real está detrás de cualquier número?setPixelFormat - Solo obtén esto, no sé lo que está haciendo en general.setFrameRate (30) - Creo que esto debería ser bastante claro, pero aún así, ¿cuál es la lógica detrás de qué velocidad de fotogramas elegimos (no es la mejor la mejor?)setVideoBitrate (10 * 1024 * 1024) - una vez más, casi no tengo idea de lo que hace esto y cuál es la lógica detrás de los números?

Al final, solo quiero mencionar un último problema que tengo al grabar un video como este. Si la duración real del video es digamos 20secs. Cuando reproduzco el archivo de video creado desde el programa, se ejecuta significativamente más rápido. No puedo saber si es exactamente 2 veces más rápido de lo que debería ser, pero en general, si grabo un video de 20 segundos, se reproducirá durante unos 10 segundos. ¿Qué puede causar esto y cómo puedo solucionarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta