如何使用python-vlc库将流媒体视频保存为独立文件?
VLC播放RTSP流同时录制视频的实现方案
你的代码存在两个核心问题导致录制功能失效:
--sout参数的语法不符合VLC流媒体输出规则,未设置“同时播放+录制”的分流逻辑- 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,提问作者Сергей Невдяев
相关产品推荐
相关产品推荐

