Каков правильный формат вывода ffmpeg для петлевого устройства 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
Устройство /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!
Я уже пытался следовать предложенным ниже ответам безрезультатно. Я заметил, что v4l2 указан как demux только в 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!
1 ответ
v4l2loopback v0.11.0 имеет ошибку, которая теперь исправлена, поэтому нет необходимости вручную изменять исходный код, как показано в отчете об ошибке. На данный момент не существует более новой версии выпуска с исправлением, поэтому обновите ветку master, которая содержит исправление.
Установка
Arch 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
ffmpeg
Примеры
Захватить рабочий стол:
ffmpeg -f x11grab -framerate 25 -video_size 1280x720 -i :0.0+0,0 -f v4l2 /dev/video0
Отправить файл:
ffmpeg -re input.mp4 -f v4l2 /dev/video0
Воспроизведение видео
ffplay
ffplay -f v4l2 /dev/video0
mpv
mpv --demuxer-lavf-format v4l2 /dev/video0
VLC
Носитель → Устройство Open Capture