我只是在创建用于录制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)VideoLANVLC"
:: 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
您的VLC命令不正确:它应该是"源捕获-代码转换"格式,而不是相反。请遵循流式处理HowTo/命令行示例,另请参阅FLV支持。同样,命令输出取决于所使用的VLC版本。旧版本的VLC2.2.2可以更好地使用Cmd,并允许在没有输出错误的情况下使用VLM配置文件。
通常,在尝试从批启动VLC之前,请尝试通过VLC GUI在Windows中使用相同的转码选项,看看它是否能够正确捕获和转码输出,以及CPU负载。遵循代码转换命令示例,更多信息请点击此处。考虑将代码转换为H264或更新的编解码器格式以获得较小的文件大小。
在高CPU负载的情况下,作为一种替代方案,尝试最新的Windows版FFMpeg Zeranoe,因为与VLC相比,通常CPU负载更低,转码质量更高。浏览他们的论坛以获得正确的代码转换命令示例。注意,VLC也使用FFMPEG包,但使用的是较旧的版本。Windows FFMPEG构建使用DirectShow捕获USB网络摄像头输入,因此典型的命令看起来与Linux构建不同,但IPCams可能看起来相似。
对于您的特定IPCam模型,从FFMPEG\bin文件夹运行的非常基本的流捕获批处理文件可能如下所示(未经测试,但适用于我的IPCam模型和修改的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:Videosoutput.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:Videosoutput.flv
根据您的IPCam型号,请检查相机连接数据库以获取正确的URL捕获字符串。另请参阅将MJPEG转换为FLV或MP4。
感谢@sambul35,以防有人需要Linux方面的帮助。您可以使用此命令从HTTP服务器记录实时流并保存到文件:-
vlc "http://{http_server_uri}" --sout="#duplicate{dst=std{access=file,mux=avi,dst='{destination}/{filename}.avi'},dst=nodisplay}"