VLC将流保存到文件

时间:2016-04-06 09:53:43

标签: windows batch-file stream record vlc

我只是在为CCTV录制流创建批处理文件。 以前这可以在Ubuntu服务器上运行,代码如下:

cvlc -d --sout "#transcode{vcodec=FLV1,vb=512,fps=3,acodec=none,sfilter=marq{marquee='АБК %d.%m.%Y %H.%M.%S',opacity=200,size=20}}:std{access=file,mux=ffmpeg{mux=flv},dst=/storage/surveillance/$date/${name[$i]}/$curdate.flv}" --ttl=127 "http://cameralogin@camerapassword@cam_ip/cgi-bin/cmd/encoder?&${analog[$i]}&GET_STREAM" --http-reconnect --http-continuous --sout-mux-caching=1500 --udp-caching=6000 --tcp-caching=6000

我在MJPG中从相机获得HTTP流,我可以使用此

从cmd打开
vlc.exe "http://cameralogin@camerapassword@cam_ip/cgi-bin/cmd/encoder?&$CHANNEL=1&GET_STREAM"

但是当我尝试将其保存到文件时,我坚持将其添加到上一个命令:

--sout "#transcode{vcodec=FLV1,vb=512,fps=3,acodec=none,sfilter=marq{marquee='АБК %date% %time%',opacity=200,size=20}}:std{access=file,mux=ffmpeg{mux=flv},dst=%archive%\%name%\%date%\%time%.flv}" 

VLC已打开,但路径中没有视频输出和文件。光盘F是本地硬盘,登录和密码是正确的凸轮。批量从本地管理员打开。

完整文件如下所示:

:: Set encoding for cyrillyc symvols
@chcp 866

:: Some vars for easy edit in future
:: Choosing cam
:: set analog=CHANNEL=1
set analog=CHANNEL=2
:: set analog=CHANNEL=3
:: set analog=CHANNEL=4

:: Choose folder to save
:: set name="2 этаж"
set name="1 этаж"
:: set name="Главный_вход"
:: set name="1 этаж 2"

:: Path to archive
set archive="F:\Archive\Охрана"

:: Move to vlc.exe folder
cd "c:\Program Files (x86)\VideoLAN\VLC"

:: Record Video
vlc.exe --sout "#transcode{vcodec=FLV1,vb=512,fps=3,acodec=none,sfilter=marq{marquee='АБК %date% %time%',opacity=200,size=20}}:std{access=file,mux=ffmpeg{mux=flv},dst=%archive%\%name%\%date%\%time%.flv}" --ttl=127 "http://cameralogin@camerapassword@cam_ip/cgi-bin/cmd/encoder?&$%analog%&GET_STREAM" --http-reconnect --http-continuous --sout-mux-caching=1500 --udp-caching=6000 --tcp-caching=6000

2 个答案:

答案 0 :(得分:1)

您的VLC命令不正确:它应该在"源捕获 - 转码"格式,而不是相反。请关注Streaming HowTo/Command Line Examples,另请参阅FLV support。同样,命令输出取决于使用的VLC版本。较早版本的VLC2.2.2可以在Cmd中更好地工作,并允许使用VLM Config file而不会出现输出错误。

通常,在尝试从批处理中启动VLC之前,请尝试通过VLC GUI在Windows中使用相同的转码选项,并查看它是否可以正确捕获和转码输出,以及CPU负载是什么。遵循transcode命令示例,更多here。考虑将代码转换为H264或更新的编解码器格式以获得更小的文件大小。

在高CPU负载的情况下,作为替代方案,尝试最新的FFMpeg Zeranoe版本的Windows,因为与VLC相比,CPU负载通常较低,转码质量较高。查看他们的论坛以获取正确的转码命令examples。注意,VLC也使用FFMPEG包,但是旧版本。 Windows FFMPEG构建使用DirectShow捕获USB网络摄像头输入,因此典型命令看起来与Linux版本不同,但对于IPCams可能看起来类似。

对于您的特定IPCam模型,从FFMPEG \ bin文件夹运行的非常基本的流捕获批处理文件可能如下所示(未经测试,但适用于我的带有修改后的URL字符串的IPCam模型):

@echo off
ffmpeg -f mjpeg -i ^
 "http://login:password@cam_ip/cgi-bin/cmd/encoder?&$CHANNEL=1&GET_STREAM" ^
 -vcodec flv -q:v 1 -an K:\Videos\output.flv
exit /b

Foscam MJPEG IPCam捕获的另一个典型命令示例:

ffmpeg -f mjpeg -i "http://Cam_IP:8080/videostream.cgi?user=[login]&pwd=[password]" ^
 -vcodec flv -q:v 1 -an K:\Videos\output.flv

根据您的IPCam型号,检查Camera Connection Database是否有正确的网址捕获字符串。另请参阅Transcoding MJPEG to FLV or MP4

答案 1 :(得分:0)

感谢@ sambul35,以防万一有人需要有关Linux的帮助。您可以使用此命令来记录来自HTTP服务器的实时流并将其保存到文件:-

vlc "http://{http_server_uri}" --sout="#duplicate{dst=std{access=file,mux=avi,dst='{destination}/{filename}.avi'},dst=nodisplay}"