簡體   English   中英

ffmpeg - 視頻部分的無縫交叉漸變循環

[英]ffmpeg - seamless crossfade loop for the part of video

我需要將淡入淡出應用到具有前 X 幀的視頻的最后 X 幀以獲得無縫循環,但將其用於視頻的必要部分。

這是循環播放整個視頻的答案。

目前我所擁有的:(整個視頻持續時間 = 25。剪切(結果)部分 = 15 秒(從 5 秒到 20 秒位置)。過渡 = 1 秒。)

ffmpeg -i input.mp4 -ss 5 -to 20 -filter_complex
    "[0]split[body][pre];
     [pre]trim=duration=1,format=yuva420p,fade=d=1:alpha=1,setpts=PTS+( (15+(5-1)) /TB)[jt];
     [body]trim=1,setpts=PTS-STARTPTS[main];
     [main][jt]overlay"  -c:v libx264 -preset veryslow -b:v 2500K output.mp4
 

在這種情況下,一切正常,但在生成的視頻末尾,疊加了原始視頻中的一段,從 0 到 1 秒開始,而不是從 4 到 5 秒的原始視頻,它應該是。

我閱讀了官方 ffmpeg 文檔,嘗試對“修剪/淡入淡出”的“開始/結束”參數進行一些操作,同時更改“setpts”,但我總是遇到另一批錯誤。

花了更多時間后,我決定從更容易理解的東西(更簡單的邏輯)開始。 我只是刪除-ss / -to並通過將原始視頻分成 3 個流來修改-filter_complex ,我從中刪除了相應的部分。 我使用我的問題中的方法將最后 2 個相同長度的流相互疊加。 之后,我以正確的順序重新組合它們。

(為清楚起見,我用 more 和 less 符號將變量括起來。)

-filter_complex "[0]split=3[var1][var2][var3];
[var1]trim= <cut_start> : (<cut_start> + <duration> - <fade_time>),setpts=PTS-STARTPTS[v0];
[var2]trim= (<cut_start> + <duration> - <fade_time>) : (<cut_start> + <duration>),setpts=PTS-STARTPTS[v1];
[var3]trim= (<cut_start> - <fade_time>) : <cut_start> ,format=yuva420p,fade=start_time= (<cut_start> - <fade_time>) :duration= <fade_time> :alpha=1,setpts=PTS-STARTPTS[v2];
[v1][v2]overlay[v3];
[v0][v3]concat=n=2:v=1:a=0[out]" -map "[out]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM