是否可以在疊加時間段內暫停音訊和視訊?一旦音訊暫停,是否可以僅在該間隔期間添加新的音軌?需要播放原始音訊的剩餘時間。
例如,
我正在使用 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}
是暫停的位置(以幀為單位)。您可以透過取得影片的幀速率並將其乘以所選的長度和時間戳記(以秒為單位)來計算這些數字。
音訊部分也是如此,您必須分別使用aloop
和asetpts
以及以 Hz 為單位的取樣率。此外,您必須透過設定將音訊靜音volume=0
。
循環播放的視訊和音訊串流將比原始視訊和音訊串流更長,然後您可以在其上顯示疊加層。
由於這些命令放在一起相當複雜,我寫了一個Python程式在視訊和音訊暫停時插入“緩衝”指示器。您可以檢查循環命令是如何產生的這裡。
PTS 的偏移量
參見吉安的在這裡回答,其本質上是:
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
與 結合-vsync vfr
,其中{start_time}
是幀偏移的時間,{shift}
是應用的移位。
行動音訊
至於在特定時間間隔內播放音頻,您可以使用-itsoffset
輸入選項以抵消其開始。
或者您可以使用濾鏡將音訊串流的 PTS 偏移固定量asetpts
。