VLC将流保存到文件

K. *_*ykh 5 windows record batch-file vlc stream

我只是坚持创建用于从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
Run Code Online (Sandbox Code Playgroud)

我在MJPG中从相机获得了HTTP流,我可以使用它从cmd打开

vlc.exe "http://cameralogin@camerapassword@cam_ip/cgi-bin/cmd/encoder?&$CHANNEL=1&GET_STREAM"
Run Code Online (Sandbox Code Playgroud)

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

--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}" 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

sam*_*l35 5

您的 VLC 命令不正确:它应该采用“源捕获 - 转码”格式,而不是相反。请遵循Streaming HowTo/Command Line Examples,另请参阅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 构建不同,但对于 IPCam 可能看起来相似。

对于您的特定 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

根据您的 IPCam 型号,检查摄像机连接数据库以获取正确的 URL 捕获字符串。另请参阅将 MJPEG 转码为 FLV 或 MP4