我想制作一个大约 30 秒长的短视频,由一部分音频文件和 2 或 3 张相互过渡的静止图像组成,并应用一些偶尔出现的故障效果。
ffmpeg-2 -loop 1 -i image1.jpeg \
-loop 1 -i image2.jpeg \
-loop 1 -i image3.jpeg \
-filter_complex "[0:v]xfade=transition=hrslice:duration=10:offset=30[v1]; [v1][2:v]xfade=transition=hrslice:duration=20:offset=40[v2]; [v2]chromashift=cbh='if(gt(random(0), 0.8), 1, 20)'[v]" \
-i Razbibriga.wav -c:v libx264 -map "[v]" -c:a aac -b:a 192k -ss 30 -to 60 -movflags +faststart out.flv
我已成功创建了一个 30 秒的剪辑,其中有 3 个图像过渡,并从音频文件中获取 30 秒->60 秒的内容。
我曾尝试使用 if() 命令来偶尔应用色度偏移,但它一直在应用。
我从这个命令中得到了使用 if 的灵感
ffmpeg -y -f rawvideo -pix_fmt rgb32 -s 1920x1080 -i /dev/zero -r 30 -filter_complex "movie='square.png'[sqr];[0:][sqr]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[canvas];[canvas]chromakey=0x008000:blend=0:similarity=0.15[canvas2];[0:][canvas2]overlay[canvas3];movie='input.mp4',scale=1920:1080[i1];[0:][i1]overlay='if(gt(random(0), 0.2), 1, 4)':'if(gt(random(0), 0.1), 1, 2)',colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131[i2];[i2][canvas3]overlay[mix1];movie='9v9VVN1RE84.mp4',scale=1920:1080[grit_i1];[grit_i1]chromakey=0x16FF0A:blend=0.2:similarity=0.3,colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3[grit1];[0:][mix1]overlay[o1];[o1][grit1]overlay[o]" -map "[o]" -c:v libx264 -crf 31 -frames:v 300 output.mp4
来自这里的教程:https://www.gariany.com/2020/08/ffmpeg-step-by-step-retro-video-filter
我还不完全理解管道的工作原理,也不清楚 if() 何时/多久被评估一次。在示例中,使用覆盖,我猜它会在每一帧上被评估。在我的例子中,它似乎只被评估一次。
这是因为我使用的是静止图像吗?有什么技巧可以让它评估每一帧吗?
谢谢!