将数码单反相机设置为网络摄像头时出现问题

将数码单反相机设置为网络摄像头时出现问题

我正在尝试将我的尼康 d7000 dslr 设置为 Ubuntu 18.04 的视频设备,如下所示在本文中

当我尝试使用启动视频流/设备时

gphoto2 --capture-movie --stdout | ffmpeg -loglevel verbose -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

我收到的错误:

:~$ gphoto2 --capture-movie --stdout | ffmpeg -loglevel verbose -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0
ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Capturing preview frames as movie to 'stdout'. Press Ctrl-C to abort.

[mjpeg @ 0x5556d09cd9c0] Format mjpeg detected only with low score of 25, misdetection possible!
Input #0, mjpeg, from 'pipe:':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: mjpeg, 1 reference frame, yuvj422p(pc, bt470bg/unknown/unknown, center), 640x426, 25 tbr, 1200k tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))
[graph 0 input from stream 0:0 @ 0x5556d09e0cc0] w:640 h:426 pixfmt:yuvj422p tb:1/1200000 fr:25/1 sar:0/1 sws_param:flags=2
[auto_scaler_0 @ 0x5556d09e88e0] w:iw h:ih flags:'bicubic' interl:0
[format @ 0x5556d09e5e60] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_null_0' and the filter 'format'
[swscaler @ 0x5556d09e99c0] deprecated pixel format used, make sure you did set range correctly
[auto_scaler_0 @ 0x5556d09e88e0] w:640 h:426 fmt:yuvj422p sar:0/1 -> w:640 h:426 fmt:yuv420p sar:0/1 flags:0x4
[v4l2 @ 0x5556d09d7980] 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!

有关相机的信息:

:~$ gphoto2 --auto-detect
Model                          Port                                            
----------------------------------------------------------
Nikon DSC D7000 (PTP mode)     usb:001,005    
:~$ gphoto2 --summary
Camera summary:                                                                
Manufacturer: Nikon Corporation
Model: D7000
  Version: V1.03
  Serial Number:
Vendor Extension ID: 0xa (1.0)
Vendor Extension Description: microsoft.com: 1.0

Capture Formats: JPEG Undefined Type
Display Formats: JPEG, Undefined Type, Association/Directory, DPOF, Script, Apple Quicktime

Device Capabilities:
        File Download, File Deletion, File Upload
        Generic Image Capture, No Open Capture, Nikon Capture 1, Nikon Capture 2, Nikon Capture 3
[...]

我花了一些时间研究这些命令的手册页,但一无所获。我仍然不确定问题到底出在哪里。相机似乎正在发送一个流,至少镜子升起了,当我尝试不使用 ffmpeg 的东西时,我得到的终端充满了垃圾,我猜是文本形式的图像数据。

也许我错误地设置了 v4l2 设备?

我如何检查哪些功能正常,哪些功能无效?也许我必须告诉 v4l2 它应该做什么?

有人可以帮助我使用 gphoto + ffmpeg + video4linux 或给我指明正确的方向吗?

答案1

您是否检查过 /dev/video0 是否是适用的设备?

我测试了这种设置,发现我有 3 个视频设备。

/dev/video0 是我的笔记本电脑的网络摄像头。我不知道 /dev/video1 是什么。

/dev/video2是我的数码单反相机,通过 gphoto2。

我使用此命令启动了 gphoto2,并且一切都按预期进行。

gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2

也许您遇到了一个错误,该错误已在 eoan 包中修复。我运行:

  • ffmpeg 7:4.1.4-1build2
  • v4l2loopback 0.12.2-1

答案2

尝试

  1. 运行rmmod v4l2loopback然后列出所有使用的视频设备ls /dev/video*并记下所有设备
  2. 运行modprob v4l2loopback,然后再次列出所有视频设备,ls /dev/video*查看与 #1 中的输出相比添加了哪个设备,然后在 gphoto2 命令中使用该新添加的设备

答案3

我在使用佳能 EOS RP 时也遇到了同样的问题;我正确地执行了每一个步骤,但错误仍然出现。

因此我将相机设置从视频(拍摄)模式更改为照片模式,一切正常。

相关内容