ffmpeg - 有没有办法让多个视频源循环与 ffmpeg 一起旋转?
问题描述
有什么办法可以让我说 4 个实时视频流并让它们在屏幕上循环播放?我想获取视频源并播放,等待 5 秒,转到下一个视频源,等待 5 秒,等等......以下是ffmpeg
我想要使用的实际命令,到目前为止我唯一的想法是:
for rotation in $source4 $source5 $source6 $source7; do
ffmpeg -rtsp_transport tcp -stimeout 100 -i $source1\
-rtsp_transport tcp -stimeout 100 -i $source2\
-rtsp_transport tcp -stimeout 100 -i $source3\
-rtsp_transport tcp -stimeout 100 -i $rotation\
-filter_complex "nullsrc=size=3840x2160 [base];\
[0:v] setpts=PTS-STARTPTS [upperleft];\
[1:v] setpts=PTS-STARTPTS [upperright];\
[2:v] setpts=PTS-STARTPTS [lowerleft];\
[3:v] setpts=PTS-STARTPTS [lowerright];\
[base][upperleft] overlay=shortest=1 [tmp1];\
[tmp1][upperright] overlay=shortest=1:x=1920 [tmp2];\
[tmp2][lowerleft] overlay=shortest=1:y=1080 [tmp3];\
[tmp3][lowerright] overlay=shortest=1:x=1920:y=1080"\
-c:v h264_nvenc -preset llhq -f matroska - | ffplay -
sleep 5
done
正如您所看到的,考虑到让一切顺利进行需要多长时间,这将不是非常有效甚至不可用。如果有人有任何想法,我将不胜感激。我只精通 Linux shell 脚本 (Bash),所以目前我无法使用任何其他语言。我对其他工具或框架的尝试持开放态度。主要目标是为一组安全摄像头制作一个脚本,其中一个在马赛克中旋转通过所有其他摄像头供稿,其中不包括屏幕上已经出现的 3 个摄像头。它需要尽可能低的维护,即网络问题断开连接,它应该自动继续检查连接并在建立后重新启动。我可以很容易地在 Bash 脚本中做到这一点,但是将视频全部显示在屏幕上是一个挑战。ffplay
对于每个提要,然后使用wmctrl
或类似的方法将它们排列在屏幕上,但我仍然面临重新启动旋转的问题。
解决方案
循环无限:
#!/bin/bash
INP=("input 1.mp4" test01.mkv test02.mkv test03.mkv)
while true; do
for i in "${INP[@]}"; do
ffmpeg -i "$i" -c:v h264_nvenc -t 5 -f matroska - | ffplay -autoexit -
done
done
也许,更好的方法是单独启动每个输入并使用wmctrl
推荐阅读
- javascript - 如何在Javascript中删除字符串中的所有'a'和'c'实例?
- r - geom_boxplot 中的宽度参数和 stat = 'identity'
- python - 我无法使用 SMTLIB 添加主题 | Python
- php - 在网站上使用带有 PHP 的 Google Drive API 显示未验证消息
- c - C /* */ 注释内的正斜杠“/”
- asp.net - ASP.NET Core ControllerContext 与 UrlHelper 中的 ActionContext
- r - R中的多个条件循环
- python - Django表单初始将列表传递给一个属性
- python - 如何插入可变尺寸列表?
- spss - 在 SPSS 直方图中编辑描述性统计