如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧
Posted
技术标签:
【中文标题】如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧【英文标题】:How to overlay frames before making a gif FFMPEG WEBM TO GIF 【发布时间】:2021-05-12 06:30:35 【问题描述】:我正在使用 windows 批处理来做一些 ffmpeg 工作
基本上我需要做的就是这个
每 X 帧(本例中为 10,1、11、21 等)添加一个覆盖到 webm 源到 gif。
只要我保持当前调色板/过滤器/抖动使用的质量,如何并不重要
我找到的解决方案:我将视频制作成 png,用批处理循环覆盖 png 并制作 gif
我遇到的问题:Gif 不适用于覆盖的 pngs
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 来说非常新,这对我来说开始变得非常复杂,所以可能有一些我忽略或不完全理解的代码
重要提示如果我删除了覆盖/重命名块,我的脚本会很神奇!!!
编辑:编辑了我在脚本中使用的令人困惑的变量
【问题讨论】:
不需要分解成图片。可以在视频上进行条件叠加。 【参考方案1】: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 的意义所在。
您可以在此处https://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation 阅读更多关于 FFMPEG 的算术和表达式的信息
我不确定你是否可以使用叠加层和调色板一次性完成 webm-to-gif,如果我发现我会编辑
【讨论】:
以上是关于如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧的主要内容,如果未能解决你的问题,请参考以下文章
Ffmpeg - 从 webm 格式创建缩略图并将 webm 电影转换为 flv 电影
如何在 Python 中将动画 .gif 转换为 .webm 格式?