v4l2-loopback 设备的正确 ffmpeg 输出格式是什么?

Nob*_* SE 5 linux ffmpeg arch-linux v4l2

按照这个问题中的指南,我做了:

$ sudo modprobe v4l2loopback
$ ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

设备/dev/video0按预期显示,但 ffmpeg 命令失败并显示以下输出:

$ ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers
...
[x11grab @ 0x559767794cc0] Stream #0: not enough frames to estimate rate; consider increasing probesize
....
[v4l2 @ 0x55976779e6c0] 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!
Run Code Online (Sandbox Code Playgroud)

我已经尝试按照答案下面的建议进行操作,但无济于事。我注意到 v4l2 仅在ffmpeg -formats. 这是否意味着我不能将它用于输出到/dev/video0?如果是这样,我应该用什么代替?我试过了,h264但在大约 1000 帧后崩溃并显示以下错误消息:

$ ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f h264 /dev/video0
ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers
...
[x11grab @ 0x55da61e29cc0] Stream #0: not enough frames to estimate rate; consider increasing probesize
...
File '/dev/video0' already exists. Overwrite ? [y/N] y
....
Error writing trailer of /dev/video0: Invalid argument
....
Conversion failed!
Run Code Online (Sandbox Code Playgroud)

llo*_*gan 12

v4l2loopback v0.11.0 有一个bug现已修复,因此无需手动更改 bug 报告中所示的源代码。到目前为止,还没有带有修复程序的更新版本,因此请升级到包含修复程序的主分支。

安装

拱形Linux

在新版本发布之前,您可以使用 AUR 包v4l2loopback-dkms-git而不是v4l2loopback-dkms

Debian 和 Ubuntu

sudo apt-get remove v4l2loopback-dkms
sudo apt-get install build-essential libelf-dev linux-headers-$(uname -r) unzip
wget https://github.com/umlaeute/v4l2loopback/archive/master.zip
unzip master.zip
cd v4l2loopback-master
make
sudo make install
sudo depmod -a
sudo modprobe v4l2loopback
Run Code Online (Sandbox Code Playgroud)

ffmpeg 例子

抓取桌面:

ffmpeg -f x11grab -framerate 25 -video_size 1280x720 -i :0.0+0,0 -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

发送文件:

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

播放视频

ffplay

ffplay -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

mpv

mpv --demuxer-lavf-format v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

VLC

媒体打开捕获设备