VLC如何将流媒体保存到文件中

6

我遇到了一个问题,想要创建一个批处理文件来录制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

1
你现在是用 Windows 电脑来做这件事吗? - Jonas
1
使用Windows有很多原因,不仅仅是用于CCTV。所以,是的 - Windows Server 2k8 r2。 - K. Belykh
2个回答

5
你的VLC命令是不正确的:应该采用“源捕获 - 转码”格式,而不是相反。请参考流媒体操作指南/命令行示例,还可参阅FLV支持。此外,命令输出取决于使用的VLC版本。旧版本VLC2.2.2可能在Cmd中运行得更好,并允许在没有输出错误的情况下使用VLM配置文件。 通常,在尝试从批处理启动VLC之前,请尝试在Windows中使用VLC GUI采用相同的转码选项,看它能否正确地捕获和转码输出以及CPU负载情况。参考转码命令示例,更多信息在这里。考虑将其转码为H264或更新的编解码器格式以获得更小的文件大小。 如果CPU负载过高,作为替代方案,请尝试使用最新的FFmpeg Zeranoe Windows版本,由于通常比VLC具有较低的CPU负载和更高的转码质量。查看他们的论坛以获得适当的转码命令示例。请注意,VLC也使用FFMPEG包,但是是旧版本。Windows FFMPEG构建使用DirectShow来捕获USB网络摄像头输入,因此典型的命令在Linux构建中看起来不同,但对于IPCams可能看起来相似。 对于你特定的IPCams模型,从FFMPEG\bin文件夹运行的非常基本的流捕获批处理文件可能类似于这样(未经测试,但适用于我的IPCams模型并修改了URL字符串):
@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

请查看摄像机连接数据库,根据您的IPCams型号选择正确的URL捕获字符串。还可以参见将MJPEG转码为FLV或MP4


2
感谢@sambul35的帮助,如果有人需要Linux方面的帮助,可以使用以下命令从HTTP服务器录制实时流并保存到文件:
vlc "http://{http_server_uri}" --sout="#duplicate{dst=std{access=file,mux=avi,dst='{destination}/{filename}.avi'},dst=nodisplay}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接