gpt4 book ai didi

video - ffmpeg:录制/捕获流并同时进行场景检测

转载 作者:行者123 更新时间:2023-12-04 22:45:30 38 4
gpt4 key购买 nike

是否可以使用单个 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 只在我终止进程时出现,当我终止时,我只得到最后一个场景事件。理想情况下,我希望在检测到场景变化时获得一个新的 PNG(或者更好的是,一个简短的视频剪辑),而不会中断 video.mkv 的录制。我确信它可以通过管道和多个 ffmpeg 命令来完成,但是为了简单起见(此时主要是我自己的好奇心),我想看看仅用一个进程可以完成什么。

最佳答案

使用-frames:v 1,你只会得到一个图像输出。如果没有用于图像输出的 strftime,则按字面意义使用名称字符串。您还需要使用 -vsync 0 阻止 ffmpeg 为图像输出生成恒定的帧速率流(由于您将总输出限制为 1 帧,所以没有注意到)

使用

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"

关于video - ffmpeg:录制/捕获流并同时进行场景检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564895/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com