トップ «前の日記(2020-07-13(Mon)) 最新 次の日記(2020-07-16(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2020-07-14(Tue) 雨はあがったが

PS42で一眼レフがビデオになるまで

gphoto2 video

結構な試行錯誤があった。
他の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や内容が変った場合はあしからず。

index.htmlは ここから。