Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed

Get webcam resolution and info on Ubuntu and fix HD

Published: 23-08-2020 | Author: Remy van Elst | Text only version of this article


❗ This post is over four years old. It may no longer be up to date. Opinions may have changed.


With all the video calling nowdays due to working from home I decided to get a webcam. Since I mostly work at a workstation, I have no microphone or camera built in. A friend gave me a spare webcam, a generic non-brand. It says "HD Camera" on the box, but by default it records in 640x480. Using a few tools on Ubuntu you can figure out what resolutions are supported for your device.

It turned out to be Cheese, the webcam capture program I used, not supporting the mjpeg format, just the yuyv RAW format. Using another webcam program named Webcamoid solved it, that program was able to use mjpeg.

Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below. It means the world to me if you show your appreciation and you'll help pay the server costs:

GitHub Sponsorship

PCBWay referral link (You get $5, I get $20 after you've placed an order)

Digital Ocea referral link ($200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!)

Here's a picture of Cheese showing the possible resolutions, none of which are even near HD:

cheese resolution

lsusb

Via the device itself, without installing external software, you should be able to find out what resolutions are supported. First get the correct Bus and device ID:

lsusb

Output:

[...]
Bus 003 Device 006: ID 1b3f:2247 Generalplus Technology Inc

Along with a bunch of Linux Foundation 3.0 root hub, but this is the device I want to query. Bus 003, device 006. Query that device and grep for Width|Height:

lsusb -s 003:006 -v | grep -E "Width|Height" 

Output:

    wWidth                           1920
    wHeight                          1080
    wWidth                           1280
    [...]

This should give you a general idea. For more detailed information, you can use tools from video4linux.

video4linux

v4l, or, video4linux is a long time project regarding all things video, on linux, as the name might suggest. I remember using it with Mandrake back in the day to get a camera working, and it's still going strong as a project. Install the required packages to get started:

 apt install v4l-utils

Query the camera directly, in my case it's /dev/video0:

v4l2-ctl --list-formats-ext -d /dev/video0 

Output:

ioctl: VIDIOC_ENUM_FMT
    Index       : 0
    Type        : Video Capture
    Pixel Format: 'MJPG' (compressed)
    Name        : Motion-JPEG
        Size: Discrete 1920x1080
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 1280x720
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 800x480
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 640x480
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 640x360
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 320x240
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 176x144
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 800x600
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 1920x1080
            Interval: Discrete 0.033s (30.000 fps)

    Index       : 1
    Type        : Video Capture
    Pixel Format: 'YUYV'
    Name        : YUYV 4:2:2
        Size: Discrete 640x480
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 640x360
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 320x240
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 176x144
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 640x480
            Interval: Discrete 0.033s (30.000 fps)

Or, using ffmpeg for more compact output:

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

Output:

Compressed:       mjpeg :          Motion-JPEG : 1920x1080 1280x720 800x480 640x480 640x360 320x240 176x144 800x600 1920x1080
Raw       :     yuyv422 :           YUYV 4:2:2 : 640x480 640x360 320x240 176x144 640x480

Solving the resolution issue with Cheese

I didn't find any options to use a different format or resolution with Cheese. I tried camorama but that also has no configurable resolution. Then I tried guvcview but that crashed my KDE desktop and at last I tried Webcamoid.

That did have options for resolution and encoding, as you can see in the below image:

webcamoid

Tags: camorama , cheese , debian , guvcview , linux , tutorials , ubuntu , usb , v4l , webcam , webcamoid