live green screen solution with ffmpeg and v4l2 pseudo device
In order to get this work you need to have a recent kernel with v4l2 loopback device enabled, and ffmpeg 3.4 or greater with chroma key support. Make sure to check which camera device to use: v4l2-ctl --list-devices
Then load
sudo apt install v4l2loopback-utils v4l2loopback-dkms ffmpeg sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1 card_label="green-screen"The exclusive_caps=1 makes it work with chrome browser and google conference, shamelessly lifted from here Thanks figuring this out!
To check if mjpg is supported:
v4l2-ctl --list-formats -d /dev/video3 ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'YUYV' (YUYV 4:2:2) [1]: 'H264' (H.264, compressed) [2]: 'MJPG' (Motion-JPEG, compressed) Download and copy this script into /usr/local/bin then execute with
when background image is specified, the behavior is same is before:
chromakey -i path_to_background_image.png -c /dev/video3 -o /dev/video2 alternatively you can grab an area of the screen:
chromakey -c /dev/video3 -o /dev/video2 -x_pos=0 y_pos=800 steven@io:~/projects/chromakey$ ./chromakey -h chromakey replaces specified color key with background image of live video when '--image' is not specified it grabs the screen at '--x_pos' and '--y_pos' of area specified with '--size' USAGE: chromakey [arguments] ARGS: -h, --help # This help message -v, --verbose # Enable verbose messages -k, --key # specify color key (DEFAULT: green) -m, --similarity # chromakey similarity (DEFAULT: 0.19) -b, --blend # specify color key (DEFAULT: 0.07) -s, --size # video stream size in pixels: 1280x720 -i, --image # specify image for background (DEFAULT: ) -c, --camera # the real input camera device path (DEFAULT: /dev/video0) -o, --output # v4l2 pseudo device (DEFAULT: /dev/video1) -r, --rate # frame rate (DEFAULT: 30) -x, --x_pos # xgrab: x position (DEFAULT: 0) -y, --y_pos # xgrab: y position (DEFAULT: 0) Copyright (c) <Steven Varga 2010-2021> <steven@vargaconsulting.ca, Toronto, On> The live chromakey-ed videostream will be available on specified output device, usually /dev/video1 and can be checked with ay v4l2 compatible device here is firefox: https://webrtc.github.io/samples/src/content/devices/input-output/ Skype also known to work.