web-dev-qa-db-ja.com

v4l2-loopbackデバイスの正しいffmpeg出力フォーマットは何ですか?

この質問 のガイドに従って、私はしました:

$ 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がffmpeg -formatsでのみdemuxとしてリストされていることに気付きました。 /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!
2
Nobody

v4l2loopback v0.11.0には bug が修正されているため、バグレポートに示されているようにソースコードを手動で変更する必要はありません。現在のところ、修正された新しいリリースバージョンはないため、修正が含まれているマスターブランチにアップグレードしてください。

インストール

Arch Linux

新しいリリースバージョンがリリースされるまで、 v4l2loopback-dkms の代わりにAURパッケージ v4l2loopback-dkms-git を使用できます。

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 -i input.mp4 -f v4l2 /dev/video0

ビデオを再生する

ffplay

ffplay -f v4l2 /dev/video0

mpv

mpv --demuxer-lavf-format v4l2 /dev/video0

VLC

メディアキャプチャデバイスを開く

5
llogan