Какие настройки ffmpeg позволяют получить наилучшее разрешение видео / частоту кадров, на которое способна моя веб-камера?

Я хочу записать наилучший возможный видеофайл (с точки зрения разрешения / частоты кадров / цветов) с моей веб-камеры.
Прямо сейчас я использую эту команду:

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv

Моя веб-камера, кажется, поддерживает это:

$ ffmpeg -f v4l2 -list_formats all -i /dev/video0
…
[video4linux2,v4l2 @ 0xf07d80] Raw       : yuyv422 : YUV 4:2:2 (YUYV) : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360
[video4linux2,v4l2 @ 0xf07d80] Compressed:   mjpeg :            MJPEG : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360

Я думаю, что получил часть разрешения, но как я могу улучшить мою командную строку до:

  • Не используйте сжатие (я подозреваю, что текущий вывод.mkv сжат)
  • Используйте наилучшую частоту кадров, на которую способны камера и компьютер, без дублирования кадров (нет смысла сохранять файл со скоростью 100 кадров в секунду, если веб-камера не способна захватывать кадры с такой скоростью)
  • Все идеи для дальнейшего улучшения качества видео приветствуются

2 ответа

Вы действительно не хотите сжатия? Несжатое видео будет очень большим. Или вы не хотите перекодирования? Или без потерь?

, сжатие невозможно. Как указано в https://superuser.com/a/1302502/128124

Сначала определите доступные форматы с помощью:

      v4l2-ctl --list-formats-ext

как упоминалось в разделе: Как я могу перечислить доступные видеорежимы для веб-камеры USB в Linux?

Для меня самые высокие:

              [0]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 1280x720
                        Interval: Discrete 0.100s (10.000 fps)
        [1]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)

Затем вы также можете проверить:

      ffmpeg -f v4l2 -list_formats all -i /dev/video0

который содержит для моего устройства:

      video4linux2,v4l2 @ 0x5579b13df240] Raw       :     yuyv422 :           YUYV 4:2:2 : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720
[video4linux2,v4l2 @ 0x5579b13df240] Compressed:       mjpeg :          Motion-JPEG : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720

Затем, если я запишу два очень похожих 3,5-секундных видео, где я корчу рожи на установке, описанной в https://askubuntu.com/questions/348838/how-to-check-available-webcams-from-the-command-line/848390#848390 ред. 18 с:

      ffmpeg -y -f v4l2 -framerate 30 -video_size 1280x720 -input_format mjpeg -i /dev/video0 -c copy out.mjpeg.mkv
ffmpeg -y -f v4l2 -framerate 30 -video_size 1280x720 -input_format yuyv422 -i /dev/video0 -c copy out.yuyv422.mkv

размеры примерно:

  • 15 МБ
  • 60 МБ

иffprobeподтверждает соответственно:

          Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 10 fps, 10 tbr, 1k tbn, 1k tbc (default)

Lossless обсуждается по адресу:

Протестировано на Ubuntu 20.04, Lenovo ThinkPad P51.

Я использую: ffmpeg -f video4linux2 -input_format yuyv422 -video_size 640x480 -i /dev/video0 -c:v copy 640x480.mkv

Другие вопросы по тегам