video - ffmpeg:记录/捕获流并同时进行场景检测
问题描述
是否可以使用单个 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,则按字面意思使用名称字符串。您还需要停止 ffmpeg 使用 -vsync 0 为图像输出生成恒定帧速率流(由于您将总输出限制为 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"
推荐阅读
- azure - 无法找到具有无效数据源的 Azure Monitor 计划查询
- android - 找不到 androidx.appcompat.app.AppCompatActivity 的类文件
- r - 如何使用 lmer 计算每个级别的随机效应的系数
- python - 我正在使用具有 2 个 GPU 的 pytorch 数据并行。为什么我的模型的 state_dicts 在一个 GPU 上为空,而在另一个 GPU 上缺少键?
- wordpress - Wordpress rest API:如何附加 Post 对象的所有 ACF?
- wordpress - OpenSSL 生成证书
- kotlin - 包含空值的集合的 JSON 反序列化
- postgresql - 此表在 Postgresql 中的累积总和
- vba - 如何防止提示不安全附件?
- c# - 更新时如何将所选项目添加到 SelectList