如何让ffmpeg追加到已存在的输出文件而不是覆盖它?

5
我正在通过UDP接收MPEG-TS流并使用FFmpeg将内容保存到文件中(使用编解码器copy和映射所有流)。在流停止的情况下,我希望在它恢复时立即重新启动FFmpeg,并附加到已经写入的现有文件中。
如何配置FFmpeg以追加到文件而不是在重新启动时覆盖它?
输入和输出容器都是MPEG-TS,并且流和编解码器的数量将相同。

1
我认为这个功能还没有被实现,但你可以将其捕获到不同的文件中,然后再将它们连接起来。如果需要,你可以使用“-strftime 1”“%Y-%m-%d_%H-%M-%S.ts”将时间戳添加到文件名中。 - aergistal
很遗憾,这对我来说行不通,因为流的捕获只是我正在处理的解决方案的一部分。记录的文件同时通过我制作的基于节点的网络协议传输到其他计算机。这有点像半实时传输解决方案。我可以在源节点中重写代码以允许编号文件,但这将很麻烦。最简单的解决方案是如果FFmpeg可以继续写入已经存在的文件而不是覆盖它。 - TomRay74
@TomRay74 嘿,你解决问题了吗?已经有一段时间了。 - Patryk Cieszkowski
1个回答

3
你可以输出到 stdout ,并使用 shell 重定向将输出写入文件。这只适用于直接可连接的格式,如 mpegts ,但会产生不连续性: ffmpeg -re -i udp://... -f mpegts - >> output.ts

2
如何避免不连续?我想在播放视频时附加几个.ts块,但我可以看到每10秒钟就会切换块。如果我使用-i“concat:chunk1.ts | chunk2.ts”覆盖文件而不是附加,则不会出现此问题。我认为应该可以使用.ts块而不必覆盖来完成它,因为这就是HLS m3u8直播流的工作方式,您可以在下载文件时播放文件。 - baptx
“-re” 在这里无用吗?从文档来看,它是必需的输入值。 - 555Russich
1
如果我没记错的话,当我回答这个问题时,在实时仿真处于活动状态时,UDP流的处理方式有所区别,这会防止命令在源暂时消失时终止。在最新版本中可能不再需要。 - aergistal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接