【发布时间】:2020-11-01 20:21:11
【问题描述】:
有什么方法可以让我使用 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 或类似方法将它们排列在屏幕上,但我仍然面临一直重新启动旋转的问题。
【问题讨论】: