使用交叉淡入淡出連接多個視訊(附音訊)

使用交叉淡入淡出連接多個視訊(附音訊)

我有 7 個短視訊剪輯,它們的大小、幀速率等都相同。摘自此處之前的一篇文章,我嘗試使用以下方法連接/交叉淡化前兩個:

ffmpeg -i *clip1.mp4 -i *clip2.mp4  \
-filter_complex "[0]fade=t=out:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va0]; \
[1]fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va1];  \
[va0][va1]overlay[outv];[0][1]amix[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4

然而,這會產生一個視頻,該視頻會立即淡出第一個視頻,並最終與第二個視頻的長度完全相同(恰好是 40 秒)。我認為這是因為第一個視頻 [0] 的“st=0”?但是,如果我將其更改為“st=18”(第一個視頻長20 秒),則生成的組合視頻(out.mp4) 仍然會使第一個視頻立即消失(並且整個視頻仍然只有40 秒長)共 58 條)。但是,第一個視訊的音訊現在持續 18 秒(但它現在覆蓋第二個視訊及其音訊 18 秒)。有什麼建議可以嘗試嗎?

答案1

對於使用交叉淡入淡出連接剪輯 - 您需要注意兩件事 - 在正確的時間和正確的類型應用淡入淡出,並延遲視訊時間戳,以便每個視訊在最終組件中在正確的時間開始。

在本例中,您的第一個影片為 20 秒,第二個影片為 40 秒,並且您需要 2 秒的交叉淡入淡出。當使用覆蓋過濾器執行交叉淡入淡出時,我們只需要對傳入影片套用淡入淡出。對傳出的影片應用程式淡出會產生亮度下降 - 有時是理想的,但我避免這樣做。

所以,首先,我們應用 2 秒淡入淡出在第二個影片的開頭。

[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];

由於淡入淡出僅應用於 Alpha 通道,因此視訊需要具有 Alpha 通道。通常,視訊不會,因此在淡入淡出之前應用像素格式轉換過濾器,將第二個視訊的像素格式變更為具有 alpha 的像素格式 - 請注意ain yuva444p。類型的淡入淡出in從時間開始應用0,持續時間2s阿爾法通道只是影片的顏色像素不受影響。

現在第二個影片應該被推遲了。由於第一個影片的長度為 20 秒,並且需要 2 秒的交叉淡入淡出,因此第二個影片應在組件內從 18 秒開始。所以應用了 setpts 過濾器

setpts=PTS-STARTPTS+18/TB

結核病是指時基,並且是為流儲存時間戳記的單位。

對於音頻交叉淡入淡出,有一個交叉淡入淡出過濾器

[0][1]acrossfade=d=2

這設定了 2 秒的交叉淡入淡出。

現在我們可以組裝兩個剪輯,

ffmpeg -i *clip1.mp4 -i *clip2.mp4  \
-filter_complex \
 "[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];  \
 [0][va1]overlay[outv];[0][1]acrossfade=d=2[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4

相關內容