在視訊中疊加影像並在特定時間間隔內暫停視訊和音訊

在視訊中疊加影像並在特定時間間隔內暫停視訊和音訊

是否可以在疊加時間段內暫停音訊和視訊?一旦音訊暫停,是否可以僅在該間隔期間添加新的音軌?需要播放原始音訊的剩餘時間。

例如,

我正在使用 ffmpeg 使用下面提到的命令覆蓋視訊中的多個圖像,

ffmpeg -i 2.mp4 -i 手套.png -i 襪子.png -filter_complex "[1:v]scale=320:240 [ovrl]; [0:v][ovrl]overlay=y=Hh:enable='之間(t,3,8)'[v1];[2:v]規模=320:240 [ovrl1];[v1][ovrl1]覆蓋=y=Hh:enable='之間(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 的偏移量

參見吉安的在這裡回答,其本質上是:

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

與 結合-vsync vfr,其中{start_time}是幀偏移的時間,{shift}是應用的移位。

行動音訊

至於在特定時間間隔內播放音頻,您可以使用-itsoffset輸入選項以抵消其開始。

或者您可以使用濾鏡將音訊串流的 PTS 偏移固定量asetpts

相關內容