绝对有可能。在最新版本的 ffmpeg 中,他们添加了一个 -stream_loop 标志,允许您根据需要循环输入多次。
问题是,如果您不从源重新生成 pts,ffmpeg 将在第一个循环后丢帧(因为时间戳会突然回到过去)。为避免这种情况,您需要告诉 ffmpeg 生成 pts,以便在循环之间获得增加的时间戳。这是通过 +genpts 调用完成的(它必须在 -i arg 之前)。
这是一个示例 ffmpeg 调用(将 $F 替换为您的输入文件)。此示例生成两个输出流,并且 -stream_loop -1 参数告诉 ffmpeg 连续循环输入。这种情况下的输出是用于类似的流广播摄取(MetaCDN),请根据您的要求进行相应调整。
ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i $F \
-s 640x360 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 600k -maxrate 600k -bufsize 600k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/lowquality_664?hello&adbe-live-event=lowquality_" \
-s 1920x1080 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 2000k -maxrate 2000k -bufsize 2000k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/highquality_2064?mate&adbe-live-event=highquality_"