Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用ffmpeg对流式视频进行分段_Video_Ffmpeg_Video Streaming_Video Capture_Video Processing - Fatal编程技术网

Video 使用ffmpeg对流式视频进行分段

Video 使用ffmpeg对流式视频进行分段,video,ffmpeg,video-streaming,video-capture,video-processing,Video,Ffmpeg,Video Streaming,Video Capture,Video Processing,假设我有一个流式视频URLrtsp://whatever 我希望将视频流作为一系列大小或持续时间大致相同的文件存储到我的文件系统中。理想情况下,我希望将带有开始和停止时间戳的文件存储为文件名的一部分,并且如果有人想查看,每个文件都应该能够独立显示为视频文件。我知道ffmpeg有一个segment命令选项,允许我按时间分段并存储在一系列文件中,如outfile%3d.dat或其他文件。但是假设我想永久地这样做,当所有保存的文件的总大小超过某个特定值时,循环使用这些文件(过时的旧文件)。例如,假设我

假设我有一个流式视频URLrtsp://whatever 我希望将视频流作为一系列大小或持续时间大致相同的文件存储到我的文件系统中。理想情况下,我希望将带有开始和停止时间戳的文件存储为文件名的一部分,并且如果有人想查看,每个文件都应该能够独立显示为视频文件。我知道ffmpeg有一个segment命令选项,允许我按时间分段并存储在一系列文件中,如outfile%3d.dat或其他文件。但是假设我想永久地这样做,当所有保存的文件的总大小超过某个特定值时,循环使用这些文件(过时的旧文件)。例如,假设我想从这个流式URL保存最近500GB的视频,并在遥远的将来日复一日地继续这样做。保存outfile999.dat后,输出文件名会发生什么变化?计数从0开始吗?还是ffmpeg只是停止或崩溃?是否有一个ffmpeg命令可以分割和老化旧文件,或者这是我必须同时运行另一个程序或者我必须侵入ffmpeg本身才能做到的事情?我是ffmpeg的新手,所以欢迎您的ffmpeg专家就如何做到这一点提出任何建议。我还欢迎对其他命令行Linux工具的建议,这些工具可能更适合此应用程序

更新:事实证明ffmpeg内置了一个分段器,我可以对文件进行分段,这样文件名就可以将视频开始日期时间作为文件名的一部分。我使用了如下命令:

ffmpeg -i rtsp://camera_feed_url_here -c copy -f segment -segment_list out.list -segment_time 900 \ -segment_atclocktime 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"
这是个好消息。坏消息是,当我运行此命令时,大约1分钟后,它会抛出此错误并停止:

rtsp://camera_feed_url_here: 处理输入时发现无效数据

未打印出其他错误或诊断表。即使在使用-logleveldebug运行时,它似乎也会随着这个错误消息而消失

当我构建ffmpeg时,使用了以下内容:

./configure --enable-demux='rtsp,rtp,sdp,flac,gif,image2,image2pipe,matrosk' --enable-network --enable-protocols --enable-decoder=h264

你知道我做错了什么以及如何消除这个错误吗?

事实证明我使用了错误的RTSP URL。实际上,上面的带有分段的ffmpeg命令工作得很好。另一个工作正常(使用正确的URL)的选项是openRTSP。我使用了这个openRTSP命令,它也可以正常工作:

/path/to/openRTSP -4 -w 1920 -h 1080 -f 25 -b 1000000 -V -t -P 60 -u username password -F outfiles rtsp://ipaddress_here/Streaming/Channels/1
以上内容将每隔60秒保存一个新文件,并将其称为outfiles-xxxx.mp4,其中xxxx是文件时间片的指示器。此外,-u选项允许您输入受密码保护的RTSP源的用户名和密码