我正在使用 windows 批处理来做一些 ffmpeg 工作
基本上我需要做的是这个
每 X 帧(本例中为 10,1、11、21 等)添加一个覆盖到 webm 源到 gif。
只要我保持当前调色板/过滤器/抖动使用的质量,如何并不重要
我找到的解决方案:我制作了一个视频到 png,用批处理循环覆盖 png 并制作一个 gif
我遇到的问题:Gif 不适用于叠加的 png
rem EXTRACTING
ffmpeg !time_range! -i "input.webm" -vsync 0 -vf "fps=20,scale=!size!" "output_%%03d.png"
这两个 %% 是因为您需要批量转义它,所以 ffmpeg 看到“%03d”REM OVERLAYING
for %%i in (_*1.png) do (
ffmpeg -y -v error -i %%i -i %tmp_blank_frame% -filter_complex "overlay" overlayed_%%~nxi
del %%i
)
REM REPLACING
rename "overlayed_*" "//////////*"
无论如何它都不漂亮,但它确实有效......有点。它确实可以正确地覆盖和重命名,但是当我将帧重新编译为 gif 时
ffmpeg -y -framerate 20 -i "output_%%03d.png" -i "!palette!" -filter_complex "!filters! [v]; [v][1:v] paletteuse=dither=!dither!" "overlayedgif.gif"
它只是给我一个错误“错误将过滤器标记为已完成”并且什么都不做。ffmpeg -y -framerate 20 -i "output_%%03d.png" -i "!palette!" "overlayedgif.gif"
它使没有黑框(跳过它们)的 gif 质量也很糟糕我愿意接受任何建议。对整个 ffmpeg 来说非常新,这对我来说开始变得非常复杂,所以可能有一些我忽略或不完全理解的代码
重要提示如果我删除覆盖/重命名 block 我的脚本作品奇迹!!!
编辑:编辑了我在脚本中使用的令人困惑的变量
最佳答案
ffmpeg
-i OG.mp4
-i frame.png
-y -filter_complex "overlay=enable='eq(mod(n,10),0)+eq(n,0)'"
overlayed.mp4
更改 'eq(mod(n,10),0)+eq(n,0)'
根据您的喜好,但这正是 Q 的意义所在。你可以在这里阅读更多关于 FFMPEG 的算术和表达式的信息 https://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation
我不确定您是否可以使用叠加层和调色板一次性完成 webm-to-gif,如果我发现我会编辑
关于ffmpeg - 如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66105221/