使用 FFMPEG 对带 alpha 通道的视频进行淡入淡出处理

使用 FFMPEG 对带 alpha 通道的视频进行淡入淡出处理

我写了一小段代码来淡入淡出视频片段 - 你可以定义视频的长度以及淡入淡出的长度。
它对没有 alpha 通道的视频很有效。
问题始于带有 alpha 通道的视频。

以下是显示该问题的视频: https://streamable.com/94fxe
第一个视频是带有 alpha 通道的视频
第二个视频是没有 alpha 通道的视频

以下是淡入淡出不透明视频的代码片段:

ffmpeg -y -i "%FilePath%" -filter_complex "[0]pad=ceil(iw/4)*4:ceil(ih/4)*4[o];[o]split[tran][body];[body]trim=0:%LoopDuration%,setpts=PTS-STARTPTS,format=yuva420p,fade=d=%TransitionTime%:alpha=1[jt];[tran]trim=%LoopDuration%:%LoopDurationNTransition%,setpts=PTS-STARTPTS[main];[main][jt]overlay" "%looped%\temp.%ext%"

下面是我用来淡入淡出带有 alpha 通道的视频的一段代码:(主要区别仅在于我用来输出带有 alpha 的视频的编解码器):

ffmpeg -y -i "%FilePath%" -filter_complex "[0]pad=ceil(iw/4)*4:ceil(ih/4)*4[o];[o]split[tran][body];[body]trim=0:%LoopDuration%,setpts=PTS-STARTPTS,format=yuva420p,fade=d=%TransitionTime%:alpha=1[jt];[tran]trim=%LoopDuration%:%LoopDurationNTransition%,setpts=PTS-STARTPTS[main];[main][jt]overlay" -vcodec prores_ks -pix_fmt yuva444p10le -profile:v 4444 -q:v 10 "%looped%\temp.%ext%"

PS 除了使用 FFMPEG 之外,我还使用 AHK - 这就是为什么有一些带有 % 的变量。

有人能告诉我问题出在哪里吗?我尝试用我能想到的所有可能方式重写它,但我无法弄清楚......

答案1

好的,我找到了我的问题所在——我忘记了我需要淡化两个层才能实现干净的交叉淡入淡出。

因此,使用 alpha 通道淡入淡出视频的代码将是:

ffmpeg -y -i "%FilePath%" -filter_complex "[0]pad=ceil(iw/4)*4:ceil(ih/4)*4[o];[o]split[tran][body];[body]trim=0:%LoopDuration%,setpts=PTS-STARTPTS,format=yuva420p,fade=in:d=%TransitionTime%:alpha=1[jt];[tran]trim=%LoopDuration%:%LoopDurationNTransition%,setpts=PTS-STARTPTS,fade=out:d=%TransitionTime%:alpha=1[main];[main][jt]overlay" -vcodec prores_ks -pix_fmt yuva444p10le -profile:v 4444 -q:v 10 "%TempFolder%\temp.%ext%"

相关内容