ZoomVideoComposer
这个脚本旨在帮助用户在几分钟内(当然取决于使用的图片数量)从一组图片(例如由Midjourney 5.2+缩放功能或其他AI工具如Stable Diffusion或Photoshop生成)创建缩放视频。
特点:
- 该脚本使用正确的插值方法进行缩放,避免了一些缩放视频中常见的加速/减速效果。
- 实现了基本的图像混合,使图像之间的过渡更加平滑。
- 允许设置视频时长、分辨率、帧率、缩放方向和缓动效果。
- 可以选择为生成的视频添加音频。
局限性:
- 目前,所有图像之间的缩放因子/比例需要保持一致。
- 目前,图像需要完美居中(Midjourney 5.2的缩放功能有时会偏移缩放后的图像,这样的图像在视频中可能效果不佳)。
我为自己创建了这个工具,以便更容易地进行Midjourney实验。我可能忽略了一些潜在的使用场景,所以如果有什么不适合您或您想要添加某些功能,请告诉我,我会尝试修复/改进。欢迎贡献,只需开启一个PR。
使用方法
要使用这个脚本,您需要在机器上安装Python。 如果您使用Windows,可以在这里下载:https://www.python.org/downloads/ MacOS和Linux用户应该默认安装了Python。
-
下载此仓库,解压缩,并在终端/命令行窗口中打开仓库的根目录。
-
在终端/命令行窗口中运行以下命令安装所需的包:
pip install -r requirements.txt
-
将图片保存到一个文件夹中,并重命名它们,使其字典顺序与您希望它们在视频中出现的顺序相匹配。例如,如果您有10张图片,可以将它们命名为"00001.png"、"00002.png"、...、"00010.png"。
-
运行"gradio_ui.py"启动Web界面,并在Web浏览器中打开http://127.0.0.1:7860使用。
或者
- 运行"zoom_video_composer.py"脚本,提供包含要用于创建视频的图片的文件夹路径(您也可以按特定顺序分别提供每张图片的路径)和其他选项,如下所示:
用法: zoom_video_composer.py [选项] 图片路径...
从多个提供的图片合成缩放视频。
选项:
-a, --audio-path 文件 将添加到视频的音频文件路径。
-z, --zoom FLOAT 图像之间的缩放因子/比例。 [默认: 2.0]
-d, --duration FLOAT 视频时长(秒)。 [默认: 10.0]
-e, --easing [linear|linearWithInOutEase|easeInSine|easeOutSine|easeInOutSine|easeInQuad|easeOutQuad|easeInOutQuad|easeInCubic|easeOutCubic|easeInOutCubic|easeInPow|easeOutPow|easeInOutPow]
缓动函数。 [默认: easeInOutSine]
--easing-power FLOAT easeInPow、easeOutPow和easeInOutPow缓动函数的幂参数。 [默认: 1.5]
--ease-duration FLOAT linearWithInOutEase中缓动的持续时间,作为视频时长的一部分。 [默认: 0.02]
-D, --direction [in|out|inout|outin]
缩放方向。Inout和outin结合了两个方向。 [默认: out]
-f, --fps INTEGER 输出视频的每秒帧数。 [默认: 30]
-w, --width FLOAT 输出视频的宽度。>1的值被解释为像素中的特定大小。
<=1的值被解释为第一张图片宽度的比例。 [默认: 1]
-h, --height FLOAT 输出视频的高度。>1的值被解释为像素中的特定大小。
<=1的值被解释为第一张图片高度的比例。 [默认: 1]
-s, --resampling [nearest|box|bilinear|hamming|bicubic|lanczos]
调整图像大小时使用的重采样技术。 [默认: lanczos]
-S, --super-sampling FLOAT 按提供的因子缩放图像。>1的值可能会增加动画的平滑度,
特别是在使用非常缓慢的缩放时。它们会增加渲染的时间。
[默认: 1.0]
-m, --margin FLOAT 从每张图像边缘裁剪的边距大小,以更好地与下一张/上一张图像混合。
>1的值被解释为像素中的特定大小。<=1的值被解释为
第一张图片较小尺寸的比例。 [默认: 0.05]
-o, --output 路径 输出视频文件。 [默认: output.mp4]
-t, --threads INTEGER 用于生成帧的线程数。使用<=0的值表示
您机器上可用的线程数减去提供的绝对值。 [默认: -1]
--tmp-dir 路径 存储帧的临时目录。 [默认: tmp]
--keep-frames 保留临时目录中的帧。否则,在生成视频后将被删除。
[默认: False]
--skip-video-generation 跳过视频生成。如果您只想生成帧,这很有用。此选项
将保留临时目录,类似于--keep-frames标志。 [默认: False]
--reverse-images 反转图像顺序。 [默认: False]
--image-engine [pil|cv2] 用于图像处理的图像引擎。 [默认: cv2]
--resume 恢复视频生成。 [默认: False]
--blend-images-only 在混合输入图像后停止。检查混合后的图像对于
在生成视频之前检测任何图像偏移或其他伪影很有用。 [默认: False]
--help 显示此消息并退出。
使用示例
在仓库的根目录中运行以下命令,从"example"目录中的图像生成一个示例视频,时长为20秒,先缩小然后再放大。视频将保存在"example_output.mp4"文件中。
python zoom_video_composer.py example -o example_output.mp4 -d 20 -D outin -e easeInOutSine
这个示例在我的MacBook Air M2上运行大约需要3分钟。可以通过降低输出视频的分辨率和选择更快的重采样技术(如"bilinear")来加快速度。以下命令在我的MacBook Air M2上运行大约需要30秒,可用于在生成最终版本之前预览视频(它将分辨率降低到512x512,帧率降至10 fps,并使用更快的重采样技术)。
python zoom_video_composer.py example -o example_output_faster.mp4 -d 20 -D outin -e easeInOutSine -f 10 -w 512 -h 512 -s bilinear
视频教程和在线使用的Google Colab
(感谢u/OkRub6877)
你可以在这里观看该工具的视频教程。 并使用这个Google Colab在线使用(无需在你的机器上安装任何东西)。
使用Midjourney生成合适图像的技巧
- 始终为所有图像使用相同的缩放因子。
- 切勿在其中一张图像上使用变化选项(
V1/2/3/4
和Vary (Strong)/(Subtle)
按钮)。它也会改变之前生成的图像部分,破坏过渡的平滑度。 - 有时,Midjourney在缩小时会略微改变物体在中心的位置。建议通过仔细选择图像来避免这种情况。也可以在运行脚本之前手动修复。参见修复图像偏移
- Midjourney中的
Zoom Out 1.5x
按钮目前有bug,使用的缩放因子与--zoom 1.5
提示参数不同。要从使用此按钮创建的图像创建动画,请使用脚本的-z 1.3333
参数。
编辑图像的技巧
该脚本将图像叠加在一起并混合。 放大程度最高的图像始终位于放大程度较低的图像之上, 因此,如果你想手动修改图像上的某些内容,只能在放大程度最高的图像上进行。
如何使用Stable Diffusion或Photoshop生成图像的技巧
Stable Diffusion
要在Stable Diffusion中创建缩小图像,你可以:
- 创建一个图像。
- 向外绘制到画布大小的倍数(例如,2倍)
- 缩小到原始大小。
重复直到获得所需数量的图像。
Photoshop
你也可以使用Photoshop创建合适的图像:
- 创建一个图像。
- 将图像调整为画布大小的倍数(例如,2倍),并在空白区域使用生成填充
- 缩小到原始大小。
重复直到获得所需数量的图像。
使用ZoomVideoComposer创建的动画
- 废弃城市中生活的猫咪(示例动画)
- 红色钻石(1分40秒)
- 原始人群(2分06秒)
- 概念预告片"A.I. 黑色电影 - 柏林城市犯罪故事"(2分00秒)
- Midjourney无缝缩放循环
- 山间之旅(1分05秒)
- 黑白(及另外3个)
- 世界尽头的鸭嘴兽(及另外2个)
通过创建拉取请求在此处添加你的动画。
使用ZoomVideoComposer的项目
- GoAPI Midjourney 缩放视频生成器 - 使用GoAPI Midjourney API从一组提示创建缩放视频来生成图像。
待办事项
- 实现更好(更平滑)的图像混合。
- 添加自动居中偏移图像的技术。