Pregunta ¿Cómo saber qué framerate debería usar para capturar la cámara web con ffmpeg?


Estoy capturando video de mi webcam con el siguiente comando:

ffmpeg -r 30 -f v4l2 -video_size 160x120 -i /dev/video0 output.avi

La opción -r indica la velocidad de cuadros que quiero. Sin embargo, no es que quiera 30 FPS, es solo que de lo contrario no funciona correctamente.

Sin framerate, la captura tiene muchos errores (supongo que intenta capturar demasiado, pero no puede seguir).

Con una velocidad de fotogramas establecida en 15, el video de salida es dos veces más largo que la duración de captura (tipo de cámara lenta).

Con una tasa de cuadros establecida en 30, parece estar bien.

¿Cómo puedo estar seguro de que debería usar 30 fps? Si quisiera capturar 15 fps, ¿qué debo hacer para obtener una reproducción correcta?

Información sobre mi cámara web:

co@macbook2008:~$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
  Index       : 0
  Type        : Video Capture
  Pixel Format: 'YUYV'
  Name        : YUV 4:2:2 (YUYV)
    Size: Discrete 160x120
      Interval: Discrete 0.033s (30.000 fps)
      Interval: Discrete 0.036s (27.500 fps)
      Interval: Discrete 0.040s (25.000 fps)
      Interval: Discrete 0.044s (22.500 fps)
      Interval: Discrete 0.050s (20.000 fps)
      Interval: Discrete 0.057s (17.500 fps)
      Interval: Discrete 0.067s (15.000 fps)
      Interval: Discrete 0.080s (12.500 fps)
      Interval: Discrete 0.100s (10.000 fps)
      Interval: Discrete 0.133s (7.500 fps)
      Interval: Discrete 0.200s (5.000 fps)
    Size: Discrete 176x144
      Interval: Discrete 0.033s (30.000 fps)
      ... and so on for other resolutions

Gracias


2


origen


Si tuviera que aventurar una suposición. El video fuente también es 30 fps. La salida del comando que emitió confirma esto. - Ramhound
¿Cómo lo confirma, ya que hay muchos fps? El primero se usa? - chocopoche
No entiendo. Usted emitió un comando v4l2-ctl --list-formats-ext y la salida indica la velocidad de fotogramas y la resolución compatibles del dispositivo fuente. Literalmente indica que 30 fps es el valor máximo que admitirá. - Ramhound
También puede establecer los fps en 27.5 si lo desea cambiando el valor y emitiendo el siguiente comando: ffmpeg -r 27.5 -f v4l2 -video_size 160x120 -i /dev/video0 output.avi - Ramhound
Cuando lo hago ffmpeg -r 15 -f v4l2 -video_size 160x120 -i /dev/video0 output.avi durante 15 segundos, tengo un avi de 30 segundos. Entonces el v4l2-ctl --list-formats-ext dice que puedo capturar a 15 fps, pero no podré jugarlo a la velocidad correcta. Supongo que lo mismo aplica para 27.5 fps, pero no puedo probar eso con seguridad. - chocopoche


Respuestas: