【发布时间】:2017-11-04 23:46:02
【问题描述】:
我有一个小的 python 程序,它可以很好地使用带有 ffmpeg 的子进程从 linux 中的网络摄像头捕获短视频(至少对于具有内置网络摄像头的笔记本电脑)。
现在我正在尝试编写相同的程序来捕获 Windows 中的网络摄像头,我知道我不能使用在 linux 中运行良好的通用“/dev/video0”,但我想命名它“集成摄像头”应该足够了,但它失败了。
这是我的 linux 代码(有效):
import sys
from subprocess import call
from datetime import datetime
def record_webcam(seconds):
cam = '/dev/video0'
timestamp = datetime.now().strftime('%Y%m%d-%H%M%S')
filename = timestamp + 'something.mkv' #generated with more complexity in the actual code, but that isn't important
ffmpeg_cmd = 'ffmpeg -t {} -an -i {} -c:v libx264 -preset veryslow -crf 25 {}'.format(seconds, cam, filename).split()
p = call(ffmpeg_cmd)
return filename if p == 0 else False
if __name__ == '__main__':
record_webcam(sys.argv[1])
我查看了 ffmpeg 的文档并试图寻找解决方案,但到目前为止我迷路了......
我知道“集成摄像头”仅在某些笔记本电脑上可用,而在其他笔记本电脑上不可用,并且它不会捕获连接的其他摄像头,但对于我的用例来说已经足够了......但如果你想要挑战,我会也想知道如何将它应用到任何带有摄像头的 windows-pc 上,不管它叫什么。
另外,是否更容易或更推荐只使用 Python 工具(如 OpenCV)来做我在这里尝试的事情?
提前致谢! 编辑:如果有人根据@Mulvya 的评论感兴趣,我会用部分解决方案回答我自己的问题,但如果有人仍然可以向我解释有关 OpenCV 的部分,我仍然想听听......强>
在此处跟进问题:ffmpeg through python subprocess fails to find camera
【问题讨论】:
-
试过了,但找不到“集成相机”,我认为将它与 libx264 编码混合也有问题,但也许我错了。你能举一个适用于任何网络摄像头的命令的例子吗?或者至少是大多数集成的?
-
没有通用命令。阅读链接文档中的examples。首先,您必须检查可用设备列表,然后选择一个并捕获它。使用 x264 编码没有问题。添加
-preset ultrafast -tune zerolatency。 -
我根据您的评论添加了自己的问题答案...非常感谢!
标签: python opencv ffmpeg directshow