【问题标题】:Is there any way to have a number of video feeds cycle in rotation with ffmpeg?有没有办法让多个视频源循环与 ffmpeg 一起旋转?
【发布时间】: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 或类似方法将它们排列在屏幕上,但我仍然面临一直重新启动旋转的问题。

【问题讨论】:

    标签: ffmpeg video-processing


    【解决方案1】:

    循环无限:

    #!/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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-02
      • 2022-01-23
      • 2016-09-06
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      相关资源
      最近更新 更多