You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell从IP摄像头JPEG流中定时捕获图像

利用PowerShell从IP摄像头JPEG流定时捕获图像(无第三方工具)

由于你的摄像头仅提供JPEG流而非单张图像端点,我们可以通过PowerShell调用.NET类直接读取流数据,提取第一帧完整的JPEG图像并保存,再配合Windows任务计划实现每十分钟自动执行。

步骤1:编写捕获图像的PowerShell脚本

创建一个.ps1脚本文件,内容如下:

# 配置参数
$cameraStreamUrl = "http://你的摄像头IP/流路径"  # 替换为实际流地址
$saveFolder = "C:\CameraCaptures"                # 替换为目标保存文件夹

# 创建保存目录(不存在则自动生成)
if (-not (Test-Path $saveFolder)) {
    New-Item -ItemType Directory -Path $saveFolder | Out-Null
}

# 生成带时间戳的文件名,避免覆盖
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$savePath = Join-Path $saveFolder "Capture_$timestamp.jpg"

try {
    # 建立摄像头流请求
    $request = [System.Net.HttpWebRequest]::Create($cameraStreamUrl)
    # 若摄像头需认证,取消下方注释并填入凭据
    # $request.Credentials = New-Object System.Net.NetworkCredential("用户名", "密码")
    
    $response = $request.GetResponse()
    $stream = $response.GetResponseStream()

    # 读取流数据,直到捕获完整JPEG帧(JPEG结束标记为0xFF 0xD9)
    $buffer = New-Object byte[] 4096
    $jpegBuffer = [System.Collections.Generic.List[byte]]::new()
    $endMarkerFound = $false

    while (-not $endMarkerFound) {
        $bytesRead = $stream.Read($buffer, 0, $buffer.Length)
        if ($bytesRead -eq 0) { break }

        $jpegBuffer.AddRange($buffer[0..($bytesRead-1)])

        # 检查是否到达JPEG帧末尾
        if ($jpegBuffer.Count -ge 2) {
            $lastTwo = $jpegBuffer[$jpegBuffer.Count-2..$jpegBuffer.Count-1]
            if ($lastTwo[0] -eq 0xFF -and $lastTwo[1] -eq 0xD9) {
                $endMarkerFound = $true
            }
        }
    }

    # 保存捕获到的JPEG图像
    if ($endMarkerFound) {
        [System.IO.File]::WriteAllBytes($savePath, $jpegBuffer.ToArray())
        Write-Host "图像已保存至: $savePath"
    } else {
        Write-Warning "未从流中捕获到完整的JPEG帧"
    }

    # 清理资源
    $stream.Close()
    $response.Close()
}
catch {
    Write-Error "捕获失败: $_"
}

脚本说明

  • 替换$cameraStreamUrl和$saveFolder为你的实际配置
  • 若摄像头需要HTTP认证,取消注释并填写正确的用户名和密码
  • 脚本会自动创建保存目录,并用时间戳命名文件,防止文件覆盖

步骤2:配置定时任务(每十分钟执行一次)

通过Windows任务计划程序实现定时执行:

  1. 打开任务计划程序,点击「创建基本任务」
  2. 任务名称设为「摄像头定时抓图」,点击下一步
  3. 触发器选择「每天」,下一步后设置「重复任务间隔」为10分钟,「持续时间」选择「无限期」,点击下一步
  4. 操作选择「启动程序」,在「程序/脚本」中填入powershell.exe,「添加参数」中填入:
    -ExecutionPolicy Bypass -File "C:\脚本的完整路径\CaptureCamera.ps1"
    
    (注意脚本路径需用引号包裹)
  5. 确认设置后,勾选「当单击完成时,打开此任务属性的对话框」,点击完成
  6. 在属性对话框中,切换到「常规」标签,勾选「不管用户是否登录都要运行」,确保任务能后台执行

注意事项

  • 确保执行任务的用户账号有访问摄像头网络和保存文件夹的权限
  • 手动运行脚本测试一次,确认能正常生成图像后再配置定时任务
  • 若摄像头流存在额外头部信息,脚本仍能通过JPEG结束标记正确提取第一帧

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:55:08