Video ffmpeg:记录/捕获流,同时进行场景检测

Video ffmpeg:记录/捕获流,同时进行场景检测,video,ffmpeg,video-streaming,Video,Ffmpeg,Video Streaming,是否可以使用单个ffmpeg命令捕获(记录)RTSP流和捕获场景更改事件?我几乎可以用它做我想做的事: ffmpeg -i 'rtsp://mystream' \ -map 0:v -map 0:a -c:v copy -c:a copy -f segment \ -segment_time 300 -segment_format matroska -strftime 1 "%Y%m%d%H%M%S_video.mkv" \ -map 0:v -an -filter:v "select='gt(

是否可以使用单个ffmpeg命令捕获(记录)RTSP流和捕获场景更改事件?我几乎可以用它做我想做的事:

ffmpeg -i 'rtsp://mystream' \
-map 0:v -map 0:a -c:v copy -c:a copy -f segment \
-segment_time 300 -segment_format matroska -strftime 1 "%Y%m%d%H%M%S_video.mkv" \
-map 0:v -an -filter:v "select='gt(scene,0.1)'" -frames:v 1 "%Y%m%d%H%M%S_scenechange.png"

这为我提供了保存到磁盘的漂亮的300s流段,以及检测到场景更改时的scene.png但是,scene.png仅在我终止进程时显示,当我终止进程时,我仅获取最后一个场景事件。理想情况下,我希望在检测到场景变化时,在不中断video.mkv录制的情况下,获得一个新的PNG(甚至更好,一个短视频剪辑)。我确信它可以通过管道和多个ffmpeg命令来完成,但是为了简单起见(这一点上主要是我自己的好奇心),我想看看单次处理可以完成什么。

对于
-frames:v1
,您只能得到一个图像输出。如果没有图像输出的strftime,则按字面意思使用名称字符串。您还需要停止ffmpeg使用-vsync 0为图像输出生成恒定帧速率流(未注意,因为您将总输出限制为1帧)

使用


谢谢,这就成功了!现在,接下来的问题是,是否可以每次获得场景更改事件的多个帧(例如,5-6帧)或短视频,或者该方法是否仅限于每个事件的单个帧?
ffmpeg -i 'rtsp://mystream' \
-map 0:v -map 0:a -c:v copy -c:a copy -f segment \
-segment_time 300 -segment_format matroska -strftime 1 "%Y%m%d%H%M%S_video.mkv" \
-map 0:v -an -filter:v "select='gt(scene,0.1)'" -vsync 0 -strftime 1 "%Y%m%d%H%M%S_scenechange.png"