首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用python从logitech网络摄像头录制音频和视频的好方法

用python从logitech网络摄像头录制音频和视频的好方法
EN

Stack Overflow用户
提问于 2020-12-13 22:50:33
回答 2查看 1.1K关注 0票数 1

我正在寻找一个好的和简单的解决方案,从我的罗技摄像头录制音频和视频使用python。

我试过使用ffmpeg,但我无法使它正常工作。

另外,我在windows上使用这个,所以解决方案应该在windows上工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 00:38:12

使用ffmpeg

使用dshow (DirectShow)输入列出设备:

代码语言:javascript
运行
复制
ffmpeg -list_devices true -f dshow -i dummy

获取视频和音频的示例命令:

代码语言:javascript
运行
复制
ffmpeg -f dshow -i video="Camera name here":audio="Microphone name here" -vf format=yuv420p output.mp4

有关更多信息和示例,请参见dshow文档FFmpeg Wiki: DirectShow

票数 2
EN

Stack Overflow用户

发布于 2021-03-21 02:04:07

如前所述,JRodrigoF有一个解决方案,它使用openCV录制视频,使用py音频录制音频。我在一个项目中使用了一段时间;但是,我注意到有时候线程会挂起,它会导致程序崩溃。另一个问题是,openCV不能以可靠的速度捕获视频帧,当重新编码时,ffmpeg会扭曲视频。

我想出了一个新的解决方案,它的记录更可靠,质量更高。然而,它只能在Windows上工作,因为它使用pywinauto和内置的Windows相机应用程序。脚本的最后一部分进行一些错误检查,通过检查视频名称的时间戳来确认成功录制的视频。

https://gist.github.com/mjdargen/956cc968864f38bfc4e20c9798c7d670

代码语言:javascript
运行
复制
import pywinauto
import time
import subprocess
import os
import datetime

def win_record(duration):
    subprocess.run('start microsoft.windows.camera:', shell=True)  # open camera app

    # focus window by getting handle using title and class name
    # subprocess call opens camera and gets focus, but this provides alternate way
    # t, c = 'Camera', 'ApplicationFrameWindow'
    # handle = pywinauto.findwindows.find_windows(title=t, class_name=c)[0]
    # # get app and window
    # app = pywinauto.application.Application().connect(handle=handle)
    # window = app.window(handle=handle)
    # window.set_focus()  # set focus
    time.sleep(2)  # have to sleep

    # take control of camera window to take video
    desktop = pywinauto.Desktop(backend="uia")
    cam = desktop['Camera']
    # cam.print_control_identifiers()
    # make sure in video mode
    if cam.child_window(title="Switch to Video mode", auto_id="CaptureButton_1", control_type="Button").exists():
        cam.child_window(title="Switch to Video mode", auto_id="CaptureButton_1", control_type="Button").click()
    time.sleep(1)
    # start then stop video
    cam.child_window(title="Take Video", auto_id="CaptureButton_1", control_type="Button").click()
    time.sleep(duration+2)
    cam.child_window(title="Stop taking Video", auto_id="CaptureButton_1", control_type="Button").click()

    # retrieve vids from camera roll and sort
    dir = 'C:/Users/michael.dargenio/Pictures/Camera Roll'
    all_contents = list(os.listdir(dir))
    vids = [f for f in all_contents if "_Pro.mp4" in f]
    vids.sort()
    vid = vids[-1]
    # compute time difference
    vid_time = vid.replace('WIN_', '').replace('_Pro.mp4', '')
    vid_time = datetime.datetime.strptime(vid_time, '%Y%m%d_%H_%M_%S')
    now = datetime.datetime.now()
    diff = now - vid_time
    # time different greater than 2 minutes, assume something wrong & quit
    if diff.seconds > 120:
        quit()
    
    subprocess.run('Taskkill /IM WindowsCamera.exe /F', shell=True)  # close camera app
    print('Recorded successfully!')

win_record(2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65281518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档