GIF 動画のつくりかた - ControlNet m2m script

详情

下载文件

模型描述

使用 ControlNet m2m 脚本可基于视频帧生成图像,并最终将其汇总为 GIF 动画输出。(视频转视频

请特别注意以下几点:

  • 仅凭提示词无法生成视频

  • 本文仅为个人方法的示例介绍

  • 并不强制要求必须遵循本文方法

  • 即使完全照本文操作,也无法保证一定获得成功结果

此外,耗时耗力仅产出一段短小视频,毫无疑问会让人感觉浪费了宝贵时间。

虽然标题标注了“ControlNet m2m script”,但 m2m 脚本本身非常易于使用。因此本文主要介绍使用 m2m 脚本前后的各种操作流程。

我的 GIF 投稿可以在 这里 查看。

使用软件

这些是我自行使用的软件。市面上存在大量替代方案或软件,建议根据自身需求选择最适合的工具。

本文不涉及各软件的下载安装方法,也不讨论除本次用途外的设置或操作方法。请自行研究解决。

我本人也并不具备深入理解这些软件的能力,也从未接受过他人直接教学。文中提到的绝大多数内容,通过搜索即可查得。

操作流程

流程的大致步骤如下:

  1. 准备源视频

  2. 从视频中裁剪图像,输入 ControlNet 进行测试

    1. 测试提示词(Prompt)

    2. 测试 Seed 值

  3. 将源视频输入 ControlNet m2m 脚本并完成输出

1. 准备源视频

我使用 OBS Studio 录制了 3D 成人游戏。我相信从 Blender 导出的动画视频或 MMD 视频也可以使用。我使用可逆压缩编码(utvideo)且将文件封装为 AVI 容器进行录制。

以下是 OBS Studio 的录制设置截图:

若已准备好源视频,则无需使用 OBS Studio。但若需录制本地应用程序画面,OBS Studio 将是一个非常有用的工具。它本质上是实时直播软件,但同样适合用于录制用途。

录制完成后,使用 aviutl 仅裁剪所需片段。

若剪辑过长,输出时间将非常漫长,因此建议尽量剪辑短一点。我个人以 0.5~1 秒为参考长度。虽然有人可能认为太短,但 30fps 的视频仅 1 秒就包含 30 幅画面,需要生成 30 张图像。

应尽量按循环播放方式剪辑,使画面连续自然。若不适合循环,建议在起止处添加淡入淡出等效果(但本阶段暂不添加效果)。

若视频中主体或背景发生显著变化,或摄像机大幅移动,建议应将此类画面单独切分为不同场景。这是因为后续编写提示词时,必须根据画面内容进行对应设定。

例如,若画面主体是一圈旋转的动画,会出现正面朝向和背面朝向的帧。正面帧可写如 “breasts” 这类关键词,而背面帧则需将 “breasts” 替换为 “back”(或许也应写作 “backboob” 呢?w)

剪辑完成后,使用 x264 编码器将视频转为 MP4 格式。若使用 aviutl,推荐安装 x264guiEx 插件,操作更简便。

在 x264 编码设置中,若指定 --qp 0,即实现可逆压缩无损编码。避免源视频编码引入噪声,以免影响生成图像质量,因此我始终坚持使用无损压缩。

虽然 m2m 脚本能够自动将非 MP4 格式的视频转换为 MP4,但此过程可能存在噪声引入风险,因此我建议主动手动编码。

2. 将视频切出的图像输入 ControlNet 进行测试

切勿直接将视频喂给 m2m 脚本,用随意提示词和参数尝试生成,那样几乎不可能得到理想结果。

首先从视频截取图像,并以此为基础测试多种提示词与 ControlNet 参数。

尽管截取图像的方式有很多(如截图),我建议使用 FFMpeg 的批量图像输出功能,将全部帧转为图像(因后续可能需要测试不同帧的表现)。

以下是使用 FFMpeg 从视频批量输出图像的命令示例:

ffmpeg -hide_banner -i "src.mp4" -ss "0:00" -f "image2" -start_number 1 "%04d.png"

简要说明参数含义:

  • -ss 指定开始截图的视频时间点。此处设为 0:00,即从第一帧开始输出。

  • 使用 -t 指定秒数可控制输出时长,但此处希望获取所有帧,故未设置。

  • -f 用于指定输出格式。输出图像时需填写,但若末尾文件名为 .png,系统也会自动识别格式。

  • -start_number 指定编号起始值,设置为 0 可实现零基编号。

  • 文件名中使用 %04d 表示“零填充4位”;若用 %d 则不填充,%05d 则为5位填充。

以下为 PowerShell 中运行该命令的示例!

https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/46d46135-0113-48a6-9aa3-fc60cbddacb6/transcode=true,width=800/ffmpeg.mp4

只需输入这短短一行命令,即可瞬时将整段视频转为图像,极为便捷。

当然,需注意若处理长视频,最终将产生大量图像,占用大量硬盘空间。

FFMpeg 在视频处理方面极为实用。剪裁、缩放、滤镜、音视频分离、编码等用途无穷,几乎难以穷尽。仅通过 FFmpeg 命令即可完成各种操作(OBS Studio 本身也封装了 FFmpeg)。

当遇到问题时,建议优先通过网络搜索解决。FFMpeg 本身也提供了全面的帮助文档,推荐结合搜索与查阅文档学习。

以下是调取 FFmpeg 帮助信息的命令示例:

ffmpeg -hide_banner -h

如需更详细的帮助,可使用以下命令,但输出内容较长,建议重定向到文本文件:

# 长帮助
ffmepg -hide_banner -h long > longhelp.txt

# 完整帮助
ffmpeg -hide_banner -h full > fullhelp.txt

也可仅查询特定类别帮助:

ffmpeg -hide_banner -h type=name

type=name 替换为所需类型,执行相应命令。

举例说明,此前用于图像输出的 image2 格式,可用哪些选项?进行如下搜索:

ffmepg -hide_banner -h muxer=image2

截至本文撰写时,输出如下:

Muxer image2 [image2 sequence]:
    Common extensions: bmp,dpx,exr,jls,jpeg,jpg,jxl,ljpg,pam,pbm,pcx,pfm,pgm,pgmyuv,phm,png,ppm,sgi,tga,tif,tiff,jp2,j2c,j2k,xwd,sun,ras,rs,im1,im8,im24,sunras,vbn,xbm,xface,pix,y,avif,qoi.
    Default video codec: mjpeg.
image2 muxer AVOptions:
  -update            <boolean>    E.......... continuously overwrite one file (default false)
  -start_number      <int>        E.......... set first number in the sequence (from 0 to INT_MAX) (default 1)
  -strftime          <boolean>    E.......... use strftime for filename (default false)
  -frame_pts         <boolean>    E.......... use current frame pts for filename (default false)
  -atomic_writing    <boolean>    E.......... write files atomically (using temporary files and renames) (default false)
  -protocol_opts     <dictionary> E.......... specify protocol options for the opened files

-start_number 外,还列出了众多可用选项,可供参考。

2-1. 测试提示词

使用此前生成的测试图像,尝试不同提示词及 ControlNet 参数组合。此阶段采用随机 Seed 值进行测试。

使用哪个 ControlNet 模型、参数如何调整,取决于源视频内容。我个人常用的是 Lineart 与 Tile 模型,权重均设为 0.5 左右。

若使用新推出的 reference_only 模型图像,将更容易接近预期效果。

以下是相同模型参数下不同提示词的效果对比(ControlNet 模型与参数保持一致):

源图像

仅影响质量的提示词

(masterpiece:1.2, best quality)

Negative prompt: (worst quality, low quality:1.4), EasyNegative

包含质量及应显示内容的详细提示词

thigh sex, clothed female nude male, simple background, black background, sad face young girl, silver short hair, diagonal bangs, blue eyes, green sportswear, covered nipples, panties aside, evil simle ugly man, frottage, grinding, penis, bald, (beard:0.8), (masterpiece:1.2), (best quality)

Negative prompt: (worst quality), (low quality:1.4), EasyNegative, (haze:1.4), (steam:1.4), (breath:1.4), text, subtitled, watermark, (logo:1.4), signature, username, artist name, title, subtitle, date stamp, header, footer, (clothes writing:1.4), tag, name tag, green skin

视频存在并不意味着提示词可随意填写,如第二张图所示,服装颜色可能不对,或男性特征完全被删除(试想一个大腿摩擦的动画,结果阴茎消失,这是无法接受的)。

因此,这类显著差异的部分必须明确写入提示词中,要求 AI 绘制。

虽然也能在提示词中生成原始视频中不存在的内容,但几乎无法保证全帧稳定一致。例如改换服装颜色尚可实现,但常伴随图案、色调不稳定等问题。

此外,即便写完提示词,第三张图中 AI 居然“自作聪明”添加了本不应出现的女性右手。此类情况仅靠提示词删除较难,因此进入下一环节:Seed 值测试。(类似抽卡)

2-2. 测试 Seed 值

当多数 Seed 值输出效果趋向一致时,即可固定提示词。

固定提示词,仅调整 Seed 值生成多张图像,若其中有令人心动的作品,即以此 Seed 值作为固定值。

若始终无法获得理想结果,原因可能是源视频与模型不匹配、提示词过于不足或过度细化等。

以下是使用相同提示词但 Seed 值不同生成的对比图:

这两组 Seed 值导致服装颜色明显变化,差异显著,故不可取。但若差异不明显,则不必过于纠结。

需明确:AI 不可能在 100% 精准和细节完全理想的情况下输出结果,适度妥协是必须的。

例如,30fps 视频每帧仅显示 0.033...秒。每帧效果优秀固然理想,但若其前后帧差异过大,最终观看视频时反而会造成违和感。

为减少这种违和感,应固定 Seed 值。

3. 将视频输入 ControlNet m2m 脚本并输出

若已安装 ControlNet,脚本列表中会出现 controlnet m2m

该脚本使用极为简单:

  1. 从脚本栏选择 controlnet m2m

  2. 将视频拖拽至指定区域

  3. 设置 Duration

仅此三步即可使用。

此处将步骤1中编码准备好的 MP4 源视频输入 m2m 脚本。

Duration 用于设置“单帧显示时间”(单位为毫秒?)。

点击 Generate 按钮开始输出,系统将逐帧生成图像,所有帧处理完毕后,自动合成 GIF 动画。

以上即是使用 m2m 脚本生成视频的基本流程。

其他说明

如需添加滤镜或编辑效果

m2m 脚本除生成 GIF 外,还会同时输出序列图像。

使用 FFMpeg 可将这些序列图像重新合成 AVI 视频。

以下为将序列图像转为 AVI 视频的命令示例:

ffmpeg -hide_banner -framerate "30" -i "%05d-<SEED_VALUE>.png" -vcodec "utvideo" -pix_fmt "yuv444p" -r "30" "output.avi"

其中 <SEED_VALUE> 需替换为实际输出时使用的 Seed 值(无需保留山括号 <>)。

-framerate-r 用于设置任意帧率。

生成 AVI 后,即可在视频编辑软件中自由编辑。

如需将编辑后的视频转为 GIF

使用 FFMpeg 即可完成(ry)

ffmpeg -hide_banner -i "src.avi" -filter_complex "[0:v] fps=30,scale=512:512,split [a][b];[a] palettegen [p];[b][p] paletteuse=dither=floyd_steinberg" "output.gif"

dithering(抖动)算法有多种,可尝试不同选项,效果与文件大小会略有变化。

以下为查看可用抖动算法的命令:

ffmpeg -hide_banner -h filter=paletteuse

关于投稿或本文相关问题的解答

Q. 是否使用了 i2i(图生图)?
A. 目前尚未使用。若需对每帧进行精细调整,或许可行,但过程极其繁琐。
Q. 是否消除了背景?
A. 尚未消除。我使用的源视频本就是简洁的黑色背景。若真想消除背景,需类似 After Effects “Roto Brush” 的高成本高性能功能。或者只能像在 GIMP 中一样,一帧一帧地手动处理背景……(太耗时间!)
Q. 能否翻译本文为英文?
A. 无法胜任。我连中学英语都掌握不牢,更别说翻译。建议个人使用 DeepL、ChatGPT 等工具,或找精通日语的人进行阅读。(但请注意,仍需自行核对翻译准确性……)
更不必说,本人写这篇日文文章也并无实际收益。若再加以英文翻译,完全无动机。更何况,一旦日文内容更新,英文版本也需同步修改……成本翻倍。根本不想考虑。
顺便一提,据 EF EPI 报告,日本人英语水平在 111 个国家中排名第 80 位(2022 年)。能力评级为“较低”,在亚洲国家中排名 24 位中的第 14 位。
https://www.ef.com/wwen/epi/regions/asia/japan/
https://www.efjapan.co.jp/epi/
由此可见,要求大多数日本人掌握英语实属困难。

本文缺乏建设性讨论,且曾有 ChatGPT 生成的一篇粗劣(且错误)的翻译投稿,因此现已关闭本页面的讨论功能。敬请谅解。

此模型生成的图像

未找到图像。