diff --git a/translated/tech/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md b/published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md similarity index 65% rename from translated/tech/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md rename to published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md index 313a16cb4d..fbeca0311b 100644 --- a/translated/tech/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md +++ b/published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md @@ -3,23 +3,28 @@ [#]: author: "Tom Oliver https://opensource.com/users/tomoliver" [#]: collector: "lkxed" [#]: translator: "Pabloxllwe" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15648-1.html" -# 如何在 Linux 中使用旧相机作为网络摄像头 +如何在 Linux 中使用旧相机作为网络摄像头 +====== -今年,在我基本上放弃 MacBook 转而使用 NixOS 机器之后,我开始收到要求在与人进行视频通话时“打开摄像头”的请求。这是一个问题,因为我没有网络摄像头。我考虑购买一个,但后来我意识到我有一台完好无损的2008年产的佳能EOS Rebel XS数码单反相机放在书架上。这台相机有一个 mini-USB 接口,所以我自然而然地思考:一台数码单反相机、一个 mini-USB 接口和一台台式电脑意味着我能拥有一个网络摄像头吗? +![][0] -只有一个问题。我的佳能 EOS Rebel XS 不能录制视频。它可以拍摄一些漂亮的照片,但就这样了。所以这就是它所有的功能了。 +> 我用 gphoto2 给我的旧单反相机带来了新的生命,把它变成了 Linux 电脑的网络摄像头。 + +今年,在我基本上放弃了 MacBook,转而使用 NixOS 机器之后,我开始在与人进行视频通话时被要求“打开摄像头”。这是一个问题,因为我没有网络摄像头。我考虑购买一个,但后来我意识到我有一台完好无损的 2008 年产的佳能 EOS Rebel XS 数码单反相机放在书架上。这台相机有一个 mini-USB 接口,所以我自然而然地思考:一台数码单反相机、一个 mini-USB 接口和一台台式电脑,是否意味着我能拥有一个网络摄像头? + +只有一个问题。我的佳能 EOS Rebel XS 不能录制视频。它可以拍摄一些漂亮的照片,仅此而已。所以这结束了? 还是有别的办法? -有一个叫做 [gphoto2](http://gphoto.org/) 的惊人的开源软件。一旦安装,它允许您从计算机控制各种受支持的相机,并拍摄照片和视频。 +恰好有一个叫做 [gphoto2](http://gphoto.org/) 的神奇的开源软件。一旦安装,它允许你从计算机控制各种支持的相机,并拍摄照片和视频。 -### 支持的摄像头 +### 支持的相机 -首先,了解您的设备是否得到支持 +首先,了解你的设备是否得到支持: ``` $ gphoto2 --list-cameras @@ -33,29 +38,29 @@ $ gphoto2 --list-cameras $ gphoto2 --capture-image-and-download ``` -快门会被触发,图像会保存到您当前的工作目录中。 +快门触发,图像会保存到你当前的工作目录中。 ### 录制视频 -我意识到了这里的潜力,所以尽管我的相机没有视频功能,我还是决定尝试`gphoto2 --capture-movie`命令。不知怎么的,尽管我的相机不支持视频功能,gphoto2 仍然能够生成一个 MJPEG 文件! +我意识到了这里的潜力,所以尽管我的相机没有视频功能,我还是决定尝试 `gphoto2 --capture-movie` 命令。不知怎么,尽管我的相机不支持视频功能,`gphoto2` 仍然能够生成一个 MJPEG 文件! -在我的相机上,我需要将其置于“实时预览”模式下,然后 gphoto2 才能录制视频。这包括将相机设置为纵向模式,然后按下 Set 按钮,使取景器关闭,相机屏幕显示图像。不幸的是,这还不足以将其用作网络摄像头。它仍然需要分配一个视频设备,例如`/dev/video0`。 +在我的相机上,我需要将其置于“实时预览”模式下,然后 `gphoto2` 才能录制视频。这包括将相机设置为纵向模式,然后按下 “设置Set” 按钮,使取景器关闭,相机屏幕显示图像。不幸的是,这还不足以将其用作网络摄像头。它仍然需要分配一个视频设备,例如 `/dev/video0`。 ### 安装 ffmpeg 和 v4l2loopback -毫不奇怪,有一个开源的解决方案来解决这个问题。首先,使用您的包管理器安装`gphoto2`、`ffmpeg`和`mpv`。例如,在 Fedora 、CentOS 、Mageia 和类似的 Linux 发行版上: +毫不奇怪,有一个开源的解决方案来解决这个问题。首先,使用你的包管理器安装 `gphoto2`、`ffmpeg` 和 `mpv`。例如,在 Fedora 、CentOS 、Mageia 和类似的 Linux 发行版上: ``` $ sudo dnf install gphoto2 ffmpeg mpv ``` -在 Debian , Linux Mint 及其类似发行版: +在 Debian、Linux Mint 及其类似发行版: ``` $ sudo apt install gphoto2 ffmpeg mpv ``` -我使用的是 NixOS ,这是我的配置文件: +我使用的是 NixOS,这是我的配置文件: ``` # configuration.nix @@ -65,9 +70,10 @@ environment.systemPackages = with pkgs; [   gphoto2   mpv ... +] ``` -创建虚拟视频设备需要使用 `v4l2loopback` Linux 内核模块。在撰写本文时,该功能未包含在主线内核中,因此您需要自己下载和编译它: +创建虚拟视频设备需要使用 `v4l2loopback` Linux 内核模块。在撰写本文时,该功能未包含在主线内核中,因此你需要自己下载和编译它: ``` $ git clone https://github.com/umlaeute/v4l2loopback @@ -77,7 +83,7 @@ $ sudo make install $ sudo depmod -a ``` -如果你像我一样使用 NixOS ,你可以在 “configuration.nix” 中添加额外的模块包: +如果你像我一样使用 NixOS ,你可以在 `configuration.nix` 中添加额外的模块包: ``` [...] @@ -92,7 +98,7 @@ boot.extraModprobeConfig = '' [...] ``` -在 NixOS 上, 运行 `sudo nixos-rebuild switch` 然后重启。 +在 NixOS 上, 运行 `sudo nixos-rebuild switch`,然后重启。 ### 创建一个视频设备 @@ -105,7 +111,7 @@ $ gphoto2 --stdout --capture-movie |  ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0 ``` -你得到的输出是这样的: +你得到的输出是这样的: ``` ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers @@ -134,7 +140,7 @@ Output #0, video4linux2,v4l2, to '/dev/video0':       encoder         : Lavc58.134.100 rawvideoframe=  289 fps= 23 q=-0.0 size=N/A time=00:00:11.56 bitrate=N/A speed=0.907x ``` -要查看来自网络摄像头的视频,请使用 `mpv`。 +要查看来自网络摄像头的视频,请使用 `mpv` 命令: ``` $ mpv av://v4l2:/dev/video0 --profile=low-latency --untimed @@ -169,23 +175,23 @@ wantedBy = [ "multi-user.target" ]; 止步于此也许很诱人。但是,考虑到当前的全球危机,我们可能需要思考是否有必要一直开着网络摄像头。这让我感到不太理想,原因如下: -- 这浪费电 +- 这浪费电。 - 这类事情涉及隐私问题。 我的摄像头有一个镜头盖,所以说实话,第二个原因并不真的让我感到困扰。当我不使用网络摄像头时,我总是可以把镜头盖上。然而,让一个耗电量大的单反相机整天开着(更不用说需要解码视频所需的 CPU 开销),对我的电费并没有任何好处。 -理想情况: +理想情况是: -- 我一直把相机插在电脑上,但它关机了。 +- 我一直把相机插在电脑上,但是关闭的。 - 当我想使用网络摄像头时,我按下相机的电源按钮将其打开。 - 我的计算机会检测到相机并启动 systemd 服务。 -- 使用网络摄像头完成后,我再次将其关闭 +- 使用网络摄像头完成后,我再次将其关闭。 为了实现这一点,你需要使用一个自定义的 udev 规则。 -一个 udev 规则告诉你的计算机,当它发现某个设备已经可用时执行某个任务。这可以是外部硬盘甚至是非 USB 设备。在这种情况下,你需要通过其 USB 连接识别摄像头。 +udev 规则可以告诉你的计算机,当它发现某个设备已经可用时执行某个任务。这可以是外部硬盘甚至是非 USB 设备。在这种情况下,你需要通过其 USB 连接识别相机。 -首先,指定 udev 规则被触发时要运行的命令。你可以将其作为一个 shell 脚本来完成(`systemctl restart webcam` 应该可以工作)。我运行的是 NixOS,所以我只需要创建一个派生包(一个 Nix 包),它会重新启动 systemd 服务: +首先,指定 udev 规则被触发时要运行的命令。你可以用一个 shell 脚本来完成(`systemctl restart webcam` 应该可以工作)。我运行的是 NixOS,所以我只需要创建一个派生包(一个 Nix 包),它会重新启动 systemd 服务: ``` # start-webcam.nix @@ -203,14 +209,14 @@ writeShellScriptBin "start-webcam" '' $ nix-shell -p usbutils ``` -无论您的计算机上已经安装了它,还是刚刚安装,请运行 “lsusb” : +无论你的计算机上已经安装了它,还是刚刚安装,请运行 `lsusb` : ``` $ lsusb Bus 002 Device 008: ID 04a9:317b Canon, Inc. Canon Digital Camera[...] ``` -在此输出中,厂商 ID 为 04a9,设备 ID 为 317b。这已足以创建 udev 规则: +在此输出中,厂商 ID 为 `04a9`,设备 ID 为 `317b`。这已足以创建 udev 规则: ``` ACTION=="add", SUBSYSTEM=="usb", @@ -219,7 +225,7 @@ ATTR{idProduct}=="317b", RUN+="/usr/local/bin/start-webcam.sh" ``` -或者,如果您使用的是 NixOS : +或者,如果你使用的是 NixOS: ``` # configuration.nix[...]let @@ -232,11 +238,11 @@ services.udev.extraRules = ''   RUN+="${startWebcam}/bin/start-webcam"'';[...] ``` -最后,在你的 `start-webcam` systemd 服务中删除 **wantedBy = ["multi-user.target"];** 这一行。(如果保留它,则无论相机是否开启,该服务都会在下次重启时自动启动。) +最后,在你的 `start-webcam` systemd 服务中删除 `wantedBy = ["multi-user.target"];` 这一行。(如果保留它,则无论相机是否开启,该服务都会在下次重启时自动启动。) ### 重复使用旧技术 -我希望这篇文章能让你在放弃一些旧技术之前三思而后行。Linux可以为技术注入活力,无论是你的电脑还是数码相机或其他外围设备等简单的东西。 +我希望这篇文章能让你在放弃一些旧技术之前三思而后行。Linux 可以为技术注入活力,无论是你的电脑还是数码相机或其他外围设备等简单的东西。 -------------------------------------------------------------------------------- @@ -244,21 +250,16 @@ via: https://opensource.com/article/22/12/old-camera-webcam-linux 作者:[Tom Oliver][a] 选题:[lkxed][b] -译者:[Pabloxllwe](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) +译者:[Pabloxllwe](https://github.com/Pabloxllwe) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: https://opensource.com/users/tomoliver - [b]: https://github.com/lkxed - [1]: https://opensource.com/article/20/7/gphoto2-linux - [2]: https://opensource.com/sites/default/files/2022-12/streaming-webcam.png - [3]: https://opensource.com/article/18/11/udev - [4]: https://opensource.com/article/22/1/cameras-usb-ports-obs - [5]: https://opensource.com/article/22/4/how-linux-saves-earth +[0]: https://img.linux.net.cn/data/attachment/album/202303/21/233633z1qxdoq1shrx1xmc.jpg \ No newline at end of file