我正在尝试将我的尼康 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
尝试
- 运行
rmmod v4l2loopback
然后列出所有使用的视频设备ls /dev/video*
并记下所有设备 - 运行
modprob v4l2loopback
,然后再次列出所有视频设备,ls /dev/video*
查看与 #1 中的输出相比添加了哪个设备,然后在 gphoto2 命令中使用该新添加的设备
答案3
我在使用佳能 EOS RP 时也遇到了同样的问题;我正确地执行了每一个步骤,但错误仍然出现。
因此我将相机设置从视频(拍摄)模式更改为照片模式,一切正常。