FFMPEG 上是否可以将 RTSP 原始帧发送到管道并按时间将视频片段写入磁盘?

FFMPEG 上是否可以将 RTSP 原始帧发送到管道并按时间将视频片段写入磁盘?

我正在尝试使用 Python 通过 ffmpeg 接收要由 OpenCV 处理的 RTSP 帧。这没问题。但是我还需要每分钟将此视频写入磁盘一个视频。最后一部分是问题所在。

这是可以的并且可以工作,但是只能写入单个文件“OUTPUT.TS”:

command = ['C:/ffmpeg/bin/ffmpeg.exe',
           '-rtsp_transport', 'tcp',   # Force TCP (for testing)
           '-max_delay', '30000000',   # 30 seconds (sometimes needed because the stream is from the web).
           '-i', STREAM_ADDRESS,
           '-f', 'rawvideo',           # Video format is raw video
           '-pix_fmt', 'bgr24',        # bgr24 pixel format matches OpenCV default pixels format.
           '-an', 'pipe:',
           '-vcodec', 'copy', '-y', 'OUTPUT.TS']

ffmpeg_process = subprocess.Popen(command, stdout=subprocess.PIPE)

但由于我使用的是 -f RAW,所以我无法添加类似

'-f segment -segment_time 1800 -strftime 1 "%Y-%m-%d_%H-%M-%S.ts'

我尝试使用一些 ffmpeg 组合,但没有成功,因为我不能给出两个 -f 标志。

有没有办法可以在不启动/停止 ffmpeg 进程的情况下在 FFMPEG 上做到这一点?

答案1

由于有两个输出,因此可以将其用于-f rawvideo第一个输出和-f segment第二个输出。

由于 RTSP 和 PIPE 使其更难以重现,我们可以使用 MP4 视频文件作为输入,并使用tmp.bgr文件作为原始输出(用于测试):

例子:
ffmpeg.exe -y -an -i BigBuckBunny_320x180.mp4 -f rawvideo -pix_fmt bgr24 tmp.bgr -vcodec copy -f segment -segment_time 60 -strftime 1 "%Y-%m-%d_%H-%M-%S.ts"

上面的例子是有效的——输出是一个名为的大型原始视频文件和多个名为、、tmp.bgr的片段文件……2023-04-02_23-04-12.ts2023-04-02_23-04-13.ts2023-04-02_23-04-14.ts


我不会用 Python 来测试它,但它应该如下所示:

command = ['C:/ffmpeg/bin/ffmpeg.exe',
           '-y', '-an',                # Ignore audio stream of the input
           '-rtsp_transport', 'tcp',   # Force TCP (for testing)
           '-max_delay', '30000000',   # 30 seconds (sometimes needed because the stream is from the web).
           '-i', STREAM_ADDRESS,
           '-f', 'rawvideo',           # Video format is raw video
           '-pix_fmt', 'bgr24',        # bgr24 pixel format matches OpenCV default pixels format.
           'pipe:',                    # First output goes to PIPE.
           '-vcodec', 'copy',          # -vcodec copy applies the second output.
           '-f', 'segment', '-segment_time', '60', '-strftime', '1', '"%Y-%m-%d_%H-%M-%S.ts"']  # Second output to segmented TS files.

相关内容