如何在制作 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 电影

如何在 iOS 上播放 .GIFV 和 .WEBM

如何在 Python 中将动画 .gif 转换为 .webm 格式?

WEB 用视频替换GIF动画

使用 ffmpeg 从 png 文件制作 gif 时颜色混乱(扭曲)

如何创建 WebM 视频文件?