ffmpeg 有没有办法在 Ubuntu 上将视频发送到 /dev/video0?

dsd*_*ddd 22 ffmpeg

我想将视频发送到 /dev/video0 上加载的 Ubuntu 上的网络摄像头设备

我已经看到了这个向它发送桌面的命令,但有没有办法向它发送视频?

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

我应该提到我特别想使用 ffmpeg 命令。

llo*_*gan 35

你可以用v4l2loopback做到这一点。首先你需要安装它:

安装 v4l2loopback

方法一:从仓库安装 v4l2loopback

sudo apt install v4l2loopback-dkms
sudo modprobe v4l2loopback
Run Code Online (Sandbox Code Playgroud)

这很容易,但旧版本的 v4l2loopback 有一些已知的错误,所以如果遇到任何问题,请考虑编译它。

方法二:编译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
Run Code Online (Sandbox Code Playgroud)

卸载

如果要删除编译的包:

sudo apt-get remove v4l2loopback
Run Code Online (Sandbox Code Playgroud)

例子

请注意,实际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
Run Code Online (Sandbox Code Playgroud)

视频文件 (MP4) 到虚拟摄像机

ffmpeg -re -i input.mp4 -map 0:v -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

图像到虚拟相机

ffmpeg -re -loop 1 -i input.jpg -vf format=yuv420p -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

摄像头 ?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
Run Code Online (Sandbox Code Playgroud)

请参阅如何定位 drawtext 文本?

绿屏/色度键/替换背景

使用chromakeyoverlayformat过滤器:

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
Run Code Online (Sandbox Code Playgroud)

请参阅如何定位叠加层?

预览 ffplay

ffplay /dev/video0
Run Code Online (Sandbox Code Playgroud)

常见错误

  • 无法打开 V4L2 设备“/dev/video0”
  • 无法打开 /dev/video0: 没有那个文件或目录
  • 与 yuvj422p 等效的未知 V4L2 像素格式

请参阅此答案以获取解决方案。

  • 我安装了该软件包,但在两个示例中都遇到了错误,无论是 x11grab 还是 mp4 视频都给我相同的`[v4l2 @ 0x55ebc0cfdc40] ioctl(VIDIOC_G_FMT):无效参数无法为输出文件写入标头# 0(不正确的编解码器参数?):无效参数错误初始化输出流 0:0 -- 转换失败!` 还有什么我应该做的吗?我错过了一些依赖项? (5认同)