我想将视频发送到 Ubuntu 上的网络摄像头设备,该设备位于 /dev/video0 上
我已经看到了这个向其发送桌面的命令,但是有没有办法向其发送视频?
ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
我应该提到我特别想使用 ffmpeg 命令。
答案1
你可以这样做v4l2loopback。首先你需要安装它:
安装 v4l2loopback
方法 1:从存储库安装 v4l2loopback
sudo apt install v4l2loopback-dkms
sudo modprobe v4l2loopback
这很容易,但是旧版本的 v4l2loopback 有一些已知的错误,所以如果遇到任何问题,请考虑编译它。
方法2:编译v4l2loopback
如果它不在你的 Ubuntu 版本的存储库中,或者你想要最新版本,你可以编译它:
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
卸载
如果你想删除你编译的包:
sudo apt-get remove v4l2loopback
例子
请注意,实际video
数量可能会有所不同,具体取决于现有设备是否已在使用/dev/video0
。检查ls /dev/video*
或的输出v4l2-ctl --list-devices
。
桌面到虚拟相机
现在运行ffmpeg
。桌面示例使用x11grab:
ffmpeg -f x11grab -framerate 15 -video_size 1280x720 -i :0.0 -f v4l2 /dev/video0
视频文件(MP4)到虚拟摄像头
ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0
图像到虚拟相机
ffmpeg -re -loop 1 -i input.jpg -vf format=yuv420p -f v4l2 /dev/video0
网络摄像头 → ffmpeg → 虚拟网络摄像头
添加文字
和绘制文本筛选:
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
绿屏/色度键/替换背景
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
预览ffplay
ffplay /dev/video0
常见错误
- 无法打开 V4L2 设备‘/dev/video0’
- 无法打开 /dev/video0:没有此文件或目录
- yuvj422p 的未知 V4L2 像素格式等效项
看这个答案寻找解决方案。