微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么办法可以使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一起玩

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。