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

如何使用python-vlc库将流媒体视频保存为独立文件?

VLC播放RTSP流同时录制视频的实现方案

你的代码存在两个核心问题导致录制功能失效:

  1. --sout参数的语法不符合VLC流媒体输出规则,未设置“同时播放+录制”的分流逻辑
  2. Windows路径中的反斜杠未转义,Python会将其解析为转义字符,导致路径识别错误

下面是修正后的可用代码,包含边播边录功能,且在窗口关闭时会正确停止录制、释放资源,避免视频文件损坏:

import vlc
from tkinter import *
import sys

def on_closing():
    # 停止播放并释放资源,保证录制文件正常写入
    player.stop()
    window.destroy()
    sys.exit()

window = Tk()
window.geometry('400x400+0+0')
window.title("CH1")
window.resizable(width=False, height=False)
# 绑定窗口关闭事件,避免强制关闭导致文件损坏
window.protocol("WM_DELETE_WINDOW", on_closing)

frame = Frame(window, width=200, height=20)
frame.pack()

display = Frame(frame)
display.place(relwidth=1, relheight=1)

# 初始化VLC实例
instance = vlc.Instance()
player = instance.media_player_new()

# 正确配置sout参数:实现分流播放与录制
# duplicate模块复制流,一路用于窗口播放,一路写入本地MP4文件
# 路径使用正斜杠或双反斜杠,避免转义问题
media = instance.media_new(
    'rtsp://admin:12345678@192.168.0.90:554/live?pf=11&pt=tcp',
    '--sout=#duplicate{dst=display,dst=standard{access=file,mux=mp4,dst=\'C:/Python_Projects/stream.mp4\'}}'
)

player.set_xwindow(display.winfo_id())
player.set_media(media)
player.play()

window.mainloop()

关键参数说明:

  • #duplicate{dst=display,dst=...}:通过duplicate模块将流媒体复制为两路,dst=display用于窗口实时播放,另一路导向文件录制逻辑
  • standard{access=file,mux=mp4,dst='路径'}:standard模块负责输出处理,access=file指定写入本地文件,mux=mp4设置封装格式为MP4,dst为输出文件的完整路径

额外提示:

  • 如果录制的视频无声音,可在sout中添加转码参数,例如:standard{access=file,mux=mp4,dst='路径',vcodec=h264,acodec=aac}
  • 确保目标文件夹已存在,否则VLC无法创建录制文件
  • RTSP流的地址、账号密码需根据实际设备调整

内容的提问来源于stack exchange,提问作者Сергей Невдяев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:26