僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
結構な試行錯誤があった。
他のPCなど(MacMiniおよびRaspberryPi3)では
ドキュメントのコピペでできてしまったが、本機に限って
$ gphoto2 --stdout --capture-movie | \ > ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p \ > -threads 0 -f v4l2 /dev/video0
などとしようものなら、
[swscaler @ 0x562db064acc0] deprecated pixel format used, make sure you did set range correctly [video4linux2,v4l2 @ 0x562db0620940] 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!
などと(少しずつ違ったが)メッセージを吐いて ffmpegが落ちてしまう。
内蔵のカメラとデバイス名がダブることは想定できたが、
それだけでは解決しない。
てけとうに検索して、v42loopbackに問題がありそうと気づく。
なんかセキュアブートに引っかかるみたいだ。
$ /usr/sbin/modinfo v4l2loopback filename: /lib/modules/5.7.0-1-amd64/updates/dkms/v4l2loopback.ko license: GPL author: Vasily Levin, IOhannes m zmoelnig,Stefan Diewald,Anton Novikovet al. description: V4L2 loopback video device depends: videodev retpoline: Y name: v4l2loopback vermagic: 5.7.0-1-amd64 SMP mod_unload modversions parm: debug:debugging level (higher values == more verbose) (int) parm: max_buffers:how many buffers should be allocated (int) parm: max_openers:how many users can open loopback device (int) parm: devices:how many devices should be created (int) parm: video_nr:video device numbers (-1=auto, 0=/dev/video0, etc.) (array of int) parm: card_label:card labels for every device (array of charp) parm: exclusive_caps:whether to announce OUTPUT/CAPTURE capabilities exclusively or not (array of bool) parm: max_width:maximum frame width (int) parm: max_height:maximum frame height (int)
解決策として、UEFI(起動時にdelete)からSecure bootをdisable にし、モジュールロード時のパラメータを追加(video_nr)する。
alias dslr-webcam v4l2loopback options v4l2loopback exclusive_caps=1 max_buffers=2 video_nr=3
そしてffmpegのパラメータの最後(デバイス指定)を /dev/video3とかにして、ダブりを防いで、なんとか。
写真は試行錯誤中の一枚。このあと再起動したらできなくなっていて、 結局長々と書いていた通りでないと駄目だった。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。