gpt4 book ai didi

python - ffmpeg 通过 python 子进程无法找到相机

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:10 24 4
gpt4 key购买 nike

这里有一个奇怪的问题,我使用这个命令通过 ffmpeg(通过 windows 上的 cmd)捕获我的网络摄像头:

ffmpeg -y -t 300 -rtbufsize 1024M -f dshow -i video="Lenovo EasyCamera" -c:v libx264 -preset veryslow -crf 25 Desktop.mkv

一切正常。但是当我通过 python 作为子进程尝试相同的命令时,它失败了。这是 Python 代码:

from subprocess import Popen
cmd = ['ffmpeg', '-y', '-t', '300', '-rtbufsize', '1024M', '-f', 'dshow', '-i', 'video="Lenovo EasyCamera"', '-c:v', 'libx264', '-preset', 'veryslow', '-crf', '25', 'Desktop.mkv']
p = Popen(cmd)

输出以下错误并卡住:

[dshow @ 00000000023a2cc0] Could not find video device with name ["Lenovo EasyCamera"] among source devices of type video.
video="Lenovo EasyCamera": I/O error

谁能解决这个问题并告诉我我做错了什么?或者它是 python 或子进程模块中的一些已知错误(使用 python 3.6.1,但如果它能帮助我解决这个问题,则不附加到特定版本)?

提前致谢!

P.S. 这个问题是这个问题的后续问题,如果相关的话:How to grab laptop webcam video with ffmpeg in windows

最佳答案

问题是,在命令行中,video="Lenovo EasyCamera" 使用引号来确保空格不会成为另一个参数。

您可以通过测试 python 文件看到这一点:

import sys
print(sys.argv[1:])
> python print_argv.py video="Lenovo EasyCamera"
['video=Lenovo EasyCamera']
> python print_argv.py "video=Lenovo EasyCamera"
['video=Lenovo EasyCamera']
> python
>>> from subprocess import Popen
>>> cmd = ['python', 'print_argv.py', 'video="Lenovo EasyCamera"']
>>> p = Popen(cmd)
['video="Lenovo EasyCamera"']

ffmpeg 认为您正在寻找名为 "Lenovo EasyCamera" 的设备,而不是 Lenovo EasyCamera

因此,您需要更改您的命令,使其不在引号中,因为 Popen 不会用空格将其拆分。

from subprocess import Popen
cmd = [..., '-i', 'video=Lenovo EasyCamera', ...]
p = Popen(cmd)

关于python - ffmpeg 通过 python 子进程无法找到相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com