Jak się dowiedzieć, której liczby klatek należy użyć do przechwytywania kamery internetowej za pomocą ffmpeg?

2

Przechwytuję wideo z kamery internetowej za pomocą następującego polecenia:

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

Opcja -r wskazuje żądaną szybkość klatek. Jednak nie chodzi o to, że chcę 30 FPS, tylko o to, że inaczej nie działa poprawnie.

Bez klatek przechwytywanie jest bardzo błędne (wydaje mi się, że próbuje uchwycić za dużo, ale nie może nadążyć).

Przy liczbie klatek na sekundę ustawionej na 15, wyjściowy obraz wideo jest dwa razy dłuższy niż czas przechwytywania (rodzaj zwolnionego tempa).

Przy liczbie klatek na sekundę ustawionej na 30 wydaje się być w porządku.

Jak mogę się upewnić, że powinienem użyć 30 fps? Jeśli chciałbym uchwycić 15 fps, co powinienem zrobić, aby uzyskać prawidłowe odtwarzanie?

Informacje o mojej kamerze internetowej:

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

Dziękuję Ci

chocopoche
źródło
Gdybym miał zaryzykować zgadywanie. Źródłowe wideo to także 30 fps. Dane wyjściowe wydanego polecenia potwierdzają to.
Ramhound
Jak to potwierdza, skoro istnieje wiele fps? Pierwszy jest używany?
chocopoche,
Nie rozumiem. Wydałeś polecenie, v4l2-ctl --list-formats-exta dane wyjściowe wskazują obsługiwaną liczbę klatek na sekundę i rozdzielczość urządzenia źródłowego. Dosłownie oznacza, że ​​30 klatek na sekundę to najwyższa obsługiwana liczba.
Ramhound
Możesz także ustawić fps na 27,5, jeśli chcesz, zmieniając wartość i wydając następującą komendę:ffmpeg -r 27.5 -f v4l2 -video_size 160x120 -i /dev/video0 output.avi
Ramhound
Gdy robię to ffmpeg -r 15 -f v4l2 -video_size 160x120 -i /dev/video0 output.aviprzez 15 sekund, mam avi 30 sekund. v4l2-ctl --list-formats-extMówi więc , że mogę uchwycić przy 15 fps, ale nie będę w stanie grać z odpowiednią prędkością. Myślę, że to samo dotyczy 27,5 fps, ale na pewno nie jestem w stanie tego przetestować.
chocopoche,