27

I want to send video to webcam device on Ubuntu which is loaded on /dev/video0

I've already seen this command that send desktop to it but is there any way to send video to it?

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

I should mention that i specifically want to use ffmpeg command.

8
  • It's my understanding that a webcam is an video input device so I would say no. What webcam do you have that supports receiving video?
    – Elder Geek
    Feb 8, 2017 at 19:12
  • @ElderGeek there is no webcam.it is virtual one which need to have video on it.
    – dsddd
    Feb 8, 2017 at 19:15
  • HAve you tried using a pipe?
    – Elder Geek
    Feb 8, 2017 at 19:25
  • Information is available here
    – Elder Geek
    Feb 8, 2017 at 19:29
  • 2
    Possible duplicate of Fake a webcam using a video loopback device? (although not necessarily using ffmpeg).
    – llogan
    Feb 8, 2017 at 19:39

1 Answer 1

40

You can do this with v4l2loopback. First you need to install it:

Install v4l2loopback

Method 1: Install v4l2loopback from the repository

sudo apt install v4l2loopback-dkms
sudo modprobe v4l2loopback

This is easy but older versions of v4l2loopback have some known bugs, so consider compiling it instead if you encounter any issues.

Method 2: Compile v4l2loopback

If it's not in the repository for your Ubuntu version, or you want the latest version, you can compile it:

sudo apt-get install build-essential checkinstall
wget https://github.com/umlaeute/v4l2loopback/archive/main.zip
unzip main.zip
cd v4l2loopback-main
make
sudo checkinstall --pkgname=v4l2loopback --pkgversion="$(date +%Y%m%d%H%M)-git" --default
sudo modprobe v4l2loopback

Uninstalling

If you want to remove the package you compiled:

sudo apt-get remove v4l2loopback

Examples

Note that the actual video number may vary depending if an existing device is already using /dev/video0. Check output of ls /dev/video* or v4l2-ctl --list-devices.

Desktop to virtual camera

Now run ffmpeg. Example for desktop using x11grab:

ffmpeg -f x11grab -framerate 15 -video_size 1280x720 -i :0.0 -f v4l2 /dev/video0

Video file (MP4) to virtual camera

ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0

Image to virtual camera

ffmpeg -re -loop 1 -i input.jpg -vf format=yuv420p -f v4l2 /dev/video0

Webcam → ffmpeg → Virtual webcam

Add text

With drawtext filter:

ffmpeg -f v4l2 -i /dev/video0 -vf "drawtext=text='Hello World':fontsize=12:fontcolor=white:font=Arial:x=w-tw-10:y=h-th-10,format=yuv420p" -f v4l2 /dev/video1

See How to position drawtext text?

Greenscreen / chroma key / replace background

Using chromakey, overlay, and format filters:

ffmpeg -re -i background.jpg -f v4l2 -i /dev/video0 -filter_complex "[1]chromakey=color=#326964:similarity=0.07:blend=0.02[fg];[0][fg]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2:format=auto,format=yuv420p" -f v4l2 /dev/video1

See How to position overlay?

Preview with ffplay

ffplay /dev/video0

Common errors

  • Unable to open V4L2 device '/dev/video0'
  • Failed to open /dev/video0: No such file or directory
  • Unknown V4L2 pixel format equivalent for yuvj422p

See this answer for solutions.

17
  • where can i specify my video ?
    – dsddd
    Feb 8, 2017 at 21:08
  • @dsddd Example updated.
    – llogan
    Feb 8, 2017 at 21:13
  • 5
    I installed the package, but I'm stuck with an error on both examples, either the x11grab or the the mp4 video give me the same [v4l2 @ 0x55ebc0cfdc40] ioctl(VIDIOC_G_FMT): Invalid argument Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument Error initializing output stream 0:0 -- Conversion failed! Is there something else I should do? some dependencies I missed?
    – Sabbin
    Jan 29, 2019 at 16:43
  • 1
    @llogan following your example above, I have this command ffmpeg -re -i 1.mp4 -map 0:v -f v4l2 /dev/video0 pastebin.com/9eDK0NTN, if I try the command to run for desktop ffmpeg -f x11grab -framerate 15 -video_size 1280x720 -i :1 -f v4l2 /dev/video0 I get this error pastebin.com/xN6uZJR6, also the folder /dev/video0 has rights for write
    – Sabbin
    Feb 4, 2019 at 7:37
  • 1
    @sabbin try with /dev/video1 Jul 3, 2019 at 10:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.