在视频中叠加图像并在特定时间间隔内暂停视频和音频

在视频中叠加图像并在特定时间间隔内暂停视频和音频

是否可以在叠加时间段内暂停音频和视频?音频暂停后,是否可以仅在该间隔内添加新音轨?剩余时间需要播放原始音频。

例如,

我正在使用 ffmpeg 使用下面提到的命令在视频中叠加多个图像,

ffmpeg -i 2.mp4 -i 手套.png -i socks.png -filter_complex “[1:v]scale=320:240 [ovrl];[0:v][ovrl]覆盖=y=Hh:enable='between(t,3,8)'[v1];[2:v]scale=320:240 [ovrl1];[v1][ovrl1]覆盖=y=Hh:enable='between(t,15,20)'[v2]” -map “[v2]” -map 0:a -c:a 复制 outputVideo.mp4

现在我需要在 3-8 秒之间暂停视频和音频,并仅在 3 到 8 秒内播放新音频,并在剩余时间内继续播放旧音频。

请帮助我。

答案1

为了暂停音频和视频,您可以使用loop流或偏移 PTS。

循环流

loop=loop={len_frames}:size=1:start={pos_frames},setpts=N/FRAME_RATE/TB

这里,{len_frames}是循环的长度(以帧为单位),{pos_frames}是暂停的位置(以帧为单位)。您可以通过获取视频的帧速率并将其与所选的长度和时间戳(以秒为单位)相乘来计算这些数字。

音频部分也是如此,您必须分别使用aloopasetpts以及以 Hz 为单位的采样率。此外,您必须通过设置 来静音音频volume=0

循环的视频和音频流将比原始视频和音频流更长,然后您可以在其上显示覆盖层。

由于这些命令组合起来相当复杂,我编写了一个Python 程序在视频和音频暂停时插入“缓冲”指示。您可以检查循环命令是如何生成的这里

PTS 偏移量

参见 Gyan 的在这里回答,其主要作用是:

setpts='PTS+gte(T\,{start_time})*({shift}/TB)'

与 相结合-vsync vfr,其中{start_time}是帧偏移的时间,{shift}是应用的偏移。

转换音频

至于在特定时间间隔内播放音频,您可以使用-itsoffset输入选项来抵消它的开始。

或者,您可以使用过滤器以固定的量偏移音频流的 PTS asetpts

相关内容