This is _extremely_ Linux only due to the dependency on v4l2loopback and obs-v4l2sink, though, as mentioned below, CatxFish has also written a similar plugin for Windows. I have not tried it, YMMV.

What is this?
=============
Wanna composite your face (as a video, from your webcam), on top of a video of
your choosing, and use that for your conference calls? NOW YOU CAN! (Zoom only
supports still-image virtual backgrounds. BOO.)

Note:  you will need a greenscreen for this. (You can try all the software-y bits below without one, but it won't look very good at all.) $60 on Amazon,
you can probably find one cheaper. (Or make. Or, honestly, it might work if you
have a solid-colored wall behind you, which I do not.)

Dependencies
============
- install obs-studio (https://obsproject.com/download, there's a deb)
- install https://github.com/umlaeute/v4l2loopback (kernel module, build from
  source)
- install https://github.com/CatxFish/obs-v4l2sink  (from source, instructions
  in README.md)
- You probably want youtube-dl; at time of writing, the youtube-dl in bionic's
  apt repo was busted, clone https://github.com/ytdl-org/youtube-dl and run as
`python -m youtube_dl`

WTF?
====
OBS Studio is a ... I guess it's intended for streamers and video production?
Then obs-v4l2sink is an OBS Studio plugin (the same author made a Windows
equivalent too) that lets OBS Studio send output to a fake video device that
apps will see as a webcam. Like Zoom, for instance. It depends on v4l2loopback,
a kernel module.

HOW TO
======
## Modprobe
After installing the dependencies, first:
- `sudo modprobe v4l2loopback exclusive_caps=1` (I am not certain if
  `exclusive_caps=1` is necessary, but it WFM)

## OBS Studio composition
- On the bottom of the obs-studio window, one of the boxes is "Sources". Click the plus;
    you want two sources.
  - One, "Video Capture Device (V4L2)" is your webcam.
  - The other is "Media Source" - this is the video file you want playing behind
    you. You probably want to check "loop".
- In the Sources list, right click the Video Capture Dev source; add an Effects
  Filter, "Chroma Key"
- Other relevant actions in the Sources list:
  - The eyeball icon will show/hide a layer - this is akin to Photoshop's
    layers
  - Right click has menu items Transform -> {Fit,Stretch} to Screen
  - Right click has menu items Order -> Move to {Top,Bottom,Front,Back} - again,
    this is akin to Photoshop's layers, and is how you decide which is on top

## OBS Studio send to fake webcam
Menu: Tools -> V4L2 Video Output. "Path to V4L2 Device" is most likel
/dev/video1.  For me, Video Format YUY2 worked; the others may or may not be
available, I honestly don't know what the difference is.

Click Start. (There"s an "Auto Start" checkbox, dunno what it's for.)

## Zoom
Now open Zoom. You can test this in settings, or you can click the up arrow next
to "Start Video" (or "Stop Video") and select your new video source - it'll be
"Dummy video device 0x0000" (or 1, 2, etc).

Now go surprise your colleagues, who will be very jealous that they only have a
static virtual background.

Contributing
============
If you find that this doesn't quite work and have a tweak to fix it, or can
explain the things I mentioned I don't understand, please let me know and I'll
update this file!