Friday Fun: How to Tweak a £10 HDMI to USB Capture Device
You want to capture HDMI on your computer? Got £10 spare?
Can you spot the difference between these two sticks?
Update December 15 2020
One of my friends has advised me that these USB devices can get overly warm, to the point that you could injure yourself. They have an internal heatsink, but also use the case to draw heat from the chip. Be careful!
Original Article
So the other day I saw tweets flying around about a £/$10 USB 2 capture stick for HDMI. Then Jo aka concreted0g bought one and people started talking about it and I thought
"Yeah I'm gonna buy one for testing."
So I bought two from eBay, and they arrived. Like a kid on Christmas morning I tore into the packaging and plugged in the sticks. I connected them up to my X390 Thinkpad as a video source and my Dell 7010 was used to see the video via OBS. But what I saw was this...
Pi 4 video source 1080P test with OBS 5fps
Lenovo X390 as video source, 1080P test with OBS 5ps
Using OBS @ 1080p I get 5fps, 720p 10fps.
— biglesp (@biglesp) June 16, 2020
Images are...
Pi 4
1st: 720p
2nd: 1080p
Lenovo X390 Ubuntu 20.04
3rd: 1080p
Frame rate and video is no good for capturing quality video / images. Shame :( pic.twitter.com/bz2CX8i3E7
Digging a little further
I wanted to learn more about these sticks, which are identical apart from the case on one has been assembled in reverse...you spotted that right?
Inside the case is a simple PCB with a chip hidden under a heatsink...
A Macro Silicon MS2109 is the chip which powers this device. I visited the Macro Silicon website and found...nothing for this chip. The latest version they have listed is the MS2106, used for analog video capture to USB.
This is the flow diagram for the 2106, I hazard a guess that the encoding section is similar as the MS2109 also outputs video as MJPEG.
What does Linux see?
Why was everyone else getting a nice 30 fps video stream?
I had a chat with Jo and he mentioned that he was using guvcview to capture the video on his Ubuntu machine. I already had that installed so I fired it up and wow, the frame rate was so much quicker. Still a little fuzzy but better.
Hi reader!
Quick Comparison Video
I recorded four videos all using a Raspberry Pi 4 as the video source.
- USB 2 to HDMI 1080P via Open Broadcaster Software - 5 frames per second, fuzzy image.
- USB 2 to HDMI 1080P via guvcview - 30 fps, fuzzy image.
- Mirabox (USB 3) via Open Broadcaster Software - 30 frames per second.
- Mirabox (USB 3) via guvcview - 30 frames per second.
The two capture devices were the £10 USB 2 to HDMI stick, and my £70 - 80 Mirabox, which I use to capture video for work.
So how can I get a better quality with OBS?
This is subjective, but for me tweaking these settings gave me 30fps at 1080p in OBS.
Set the device config
In Sources double left click on the source which is your capture device.
Set the Video Format to BGR3 (Emulated)
Change the Resolution if needed.
Set the Frame Rate to 30.00
Set Color Range to Full
Click Ok
Make the image a little sharper
I wasn't too happy with the soft image, so I delved further into the settings for the source.
Tweak these settings and see what works for you and the video source you are trying to record.
Click on Settings and then Video
Change the Downscale Filter to Lanczos (Sharpened scaling, 36 samples)
Common FPS Values set to 30
click Apply and then Ok
Now the video should be sharper and with a higher frame rate.
Final Thoughts?
For £10 this is a good USB to HDMI capture device despite the fuzzy / soft image. I wouldn't use it for work, but for casual use this will do the job.