<p>我终于找到了一些有用的示例库:</p>
<p><a href="https://github.com/jaraco/jaraco.video" rel="nofollow noreferrer">jaraco</a></p>
<p>它正是我想要达到的效果,并使用了
DirectShow(<a href="https://github.com/jaraco/jaraco.video/blob/master/jaraco/video/api/objects.py#L9" rel="nofollow noreferrer">see here</a>):</p>
<pre><code>from comtypes.gen.DirectShowLib import (FilterGraph, CaptureGraphBuilder2, ...)
</code></pre>
<p>在雅拉科视频声称是“纯Python中使用ctypes和comtypes的<a href="http://videocapture.sourceforge.net/" rel="nofollow noreferrer">VideoCapture</a>模块的端口。”</p>
<p>它使用一个<a href="https://github.com/jaraco/jaraco.video/blob/master/jaraco/video/api/__init__.py#L35" rel="nofollow noreferrer">^{<cd1>}</a>文件(不管是什么)来获取定义
变成<a href="https://github.com/jaraco/jaraco.video/blob/master/jaraco/video/api/objects.py#L9" rel="nofollow noreferrer">comtypes</a></p>
<blockquote>
<p>A type library (.tlb) is a binary file that stores information about a
COM or DCOM object's properties and methods in a form that is
accessible to other applications at runtime.</p>
</blockquote>
<p>导入是在<code>__init__.py</code>中自动生成的,可以轻松使用:</p>
^{pr2}$
<p>并且可以使用</p>
<pre><code>def _get_camera_control(self):
return self._get_graph_builder_interface(IAMCameraControl)
def get_camera_control_property(self, i):
video_properties = self._get_camera_control()
return video_properties.Get(i)
</code></pre>
<p>然后您可以将这些函数与文档中声明的<code>enum</code>结合使用,例如</p>
<pre><code># CameraControl_Exposure = 4
print(d.get_camera_control_property(4))
</code></pre>