是否可以在叠加时间段内暂停音频和视频?音频暂停后,是否可以仅在该间隔内添加新音轨?剩余时间需要播放原始音频。
例如,
我正在使用 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}
是暂停的位置(以帧为单位)。您可以通过获取视频的帧速率并将其与所选的长度和时间戳(以秒为单位)相乘来计算这些数字。
音频部分也是如此,您必须分别使用aloop
和asetpts
以及以 Hz 为单位的采样率。此外,您必须通过设置 来静音音频volume=0
。
循环的视频和音频流将比原始视频和音频流更长,然后您可以在其上显示覆盖层。
由于这些命令组合起来相当复杂,我编写了一个Python 程序在视频和音频暂停时插入“缓冲”指示。您可以检查循环命令是如何生成的这里。
PTS 偏移量
参见 Gyan 的在这里回答,其主要作用是:
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
与 相结合-vsync vfr
,其中{start_time}
是帧偏移的时间,{shift}
是应用的偏移。
转换音频
至于在特定时间间隔内播放音频,您可以使用-itsoffset
输入选项来抵消它的开始。
或者,您可以使用过滤器以固定的量偏移音频流的 PTS asetpts
。