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

如何在Python 3中通过subprocess启动VLC并自动触发Ctrl+N快捷键

解决VLC自动打开RTSP链接的问题

先聊聊你遇到的核心问题:快捷键触发失败主要是因为模块导入冲突和没有等待VLC完全启动,不过其实还有更高效的方案可以跳过手动快捷键操作,直接让VLC启动就加载你的RTSP链接。

问题根源拆解

你当前代码里有两个关键问题导致键盘模拟失效:

  • 模块导入冲突:同时导入了keyboard原生模块和pynput.keyboard,后者会覆盖前者,导致其中一个模块的功能无法正常调用
  • 无启动等待:脚本启动VLC后立刻触发快捷键,但此时VLC还在加载过程中,根本无法响应键盘事件

方案一:直接让VLC启动时加载RTSP链接(强烈推荐)

VLC本身支持在命令行参数里直接传入媒体链接,启动后会自动播放,完全不需要模拟键盘操作,这是最稳定可靠的方式。修改后的代码如下:

import os
import platform
import subprocess
from subprocess import Popen, DEVNULL

# 获取DVR参数
ip_adr = input("What is your DVR's ip address?: ")
port = input("What is your DVR's RTSP port? (it should be 554 or else): ")
username = input("What is your DVR's username? (The default is admin): ")
password = input("What is your DVR's password?: ")
linkurl = f"rtsp://{username}:{password}@{ip_adr}:{port}/Streaming/channels/1/"

# 判断操作系统
nameos = platform.system()
cmd = 'vlc'

print(f"Your DVR rtsp link is: {linkurl}")

# 直接将RTSP链接作为参数传给VLC
if nameos == "Linux":
    Popen([cmd, linkurl], stderr=DEVNULL, stdin=subprocess.PIPE, shell=False)
else:
    # Windows系统同样支持直接传链接参数
    Popen([cmd, linkurl], stderr=DEVNULL, stdin=subprocess.PIPE, shell=False)

这个方案不需要任何键盘模拟模块,完全利用VLC的原生命令行特性,稳定性拉满。


方案二:修复键盘模拟功能(若必须用快捷键方式)

如果你坚持需要模拟Ctrl+N打开窗口并输入链接,那需要解决导入冲突和启动等待的问题,这里用pynput来实现:

import os
import platform
import subprocess
import time
from subprocess import Popen, DEVNULL
from pynput.keyboard import Controller, Key

# 获取DVR参数
ip_adr = input("What is your DVR's ip address?: ")
port = input("What is your DVR's RTSP port? (it should be 554 or else): ")
username = input("What is your DVR's username? (The default is admin): ")
password = input("What is your DVR's password?: ")
linkurl = f"rtsp://{username}:{password}@{ip_adr}:{port}/Streaming/channels/1/"

# 判断操作系统
nameos = platform.system()
cmd = 'vlc'

print(f"Your DVR rtsp link is: {linkurl}")

# 启动VLC进程
if nameos == "Linux":
    vlc_process = Popen([cmd], stderr=DEVNULL, stdin=subprocess.PIPE, shell=False)
else:
    vlc_process = Popen([cmd], stderr=DEVNULL, stdin=subprocess.PIPE, shell=False)

# 等待VLC完全启动(时长根据电脑性能调整,一般3-5秒)
time.sleep(4)

# 初始化键盘控制器
keyboard = Controller()

# 模拟Ctrl+N打开媒体窗口
with keyboard.pressed(Key.ctrl):
    keyboard.press('n')
    keyboard.release('n')

# 等待窗口弹出
time.sleep(1)

# 输入RTSP链接
keyboard.type(linkurl)

# 按回车确认播放
keyboard.press(Key.enter)
keyboard.release(Key.enter)

注意事项:

  • 先安装pynput模块:pip install pynput
  • 调整time.sleep()的时长,确保VLC完全加载后再触发键盘事件
  • Linux系统可能需要额外的桌面权限来模拟键盘输入,建议在VS Code终端或图形化环境中运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:53:17