【问题标题】:ImageMagick - Making 2 GIFs into side by side GIFs using IM convertImageMagick - 使用 IM convert 将 2 个 GIF 制作成并排的 GIF
【发布时间】:2015-09-04 19:13:00
【问题描述】:

我有 2 个长度相同的 GIF。

我想将 GIF 并排放置,以便同时播放 1 个 GIF。我曾尝试将convert 工具用于:

convert +append 1.gif1 2.gif output.gif

但是,这似乎将所有图像混合在一起并将尺寸更改为非常小。

我在想我可以将每个图像附加在一起,然后从那些已经组合的图像中创建一个 GIF。但是,当我尝试时它不起作用:

convert -delay 15 -loop 0 1*.png 2*.png +append output.gif

我有很多名称很长的图像,我不想单独浏览并为每个图像附加新的命名约定。

【问题讨论】:

    标签: image unix imagemagick imagemagick-convert


    【解决方案1】:

    我没有 2 个长度相同的 GIF 动画,所以我只使用这个的两个副本:

    让我们看看里面的框架,用这个:

    identify 1.gif
    1.gif[0] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[1] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[2] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[3] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[4] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[5] GIF 449x339 500x339+51+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[6] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[7] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[8] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[9] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[10] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[11] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[12] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[13] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[14] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[15] GIF 448x339 500x339+52+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[16] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    1.gif[17] GIF 500x339 500x339+0+0 8-bit sRGB 32c 508KB 0.000u 0:00.000
    

    嗯,18 个不同大小的帧,这意味着我们需要使用-coalesce 将部分帧重建为完整帧。

    让我们复制它并制作2.gif

    cp 1.gif 2.gif
    

    现在我们可以将这两个 gif 拆分为它们的组件帧,如下所示:

    convert 1.gif -coalesce a-%04d.gif     # split frames of 1.gif into a-0001.gif, a-0002.gif etc
    convert 2.gif -coalesce b-%04d.gif     # split frames of 2.gif into b-0001.gif, b-0002.gif etc
    

    现在让我们并排连接各个框架:

    for f in a-*.gif; do convert $f ${f/a/b} +append $f; done
    

    请注意,${f/a/b} 是一个 bash-ism,意思是 “取 f 的值并将字母 'a' 替换为 'b'”。

    然后将它们重新组合在一起:

    convert -loop 0 -delay 20 a-*.gif result.gif
    

    这看起来更长,更难,因为我试图解释这一切,但看起来真的是这样:

    convert 1.gif -coalesce a-%04d.gif                         # separate frames of 1.gif
    convert 2.gif -coalesce b-%04d.gif                         # separate frames of 2.gif
    for f in a-*.gif; do convert $f ${f/a/b} +append $f; done  # append frames side-by-side
    convert -loop 0 -delay 20 a-*.gif result.gif               # rejoin frames
    

    注意这个概念代码,不是生产质量。它不会删除它创建的临时文件,也不会将帧间时间从原始 GIF 向前推进。如果您想获得原始帧速率,您可以像这样获得它们并将它们保存到一个数组中,并在最后将延迟反馈给重新动画命令:

    identify -format "%f[%s] %T\n" 1.gif
    1.gif[0] 8
    1.gif[1] 8
    1.gif[2] 8
    1.gif[3] 8
    1.gif[4] 8
    1.gif[5] 8
    1.gif[6] 8
    1.gif[7] 8
    1.gif[8] 8
    1.gif[9] 8
    1.gif[10] 11
    1.gif[11] 11
    1.gif[12] 11
    1.gif[13] 11
    1.gif[14] 11
    1.gif[15] 11
    1.gif[16] 11
    1.gif[17] 26
    

    此外,您可能希望在两个动画之间有一个间隔,例如 10 像素,您可以通过将 for 循环内的 convert 命令替换为以下命令:

    convert $f -size 10x xc:none ${f/a/b} +append $f
    

    【讨论】:

    • 我正在使用 ImageMagic (v7.0.2) 并且所有命令都运行良好,除了 for f in a-*.gif; do convert $f ${f/a/b} +append $f; done 根据 FOR 循环上的文档,我已将其更改为:FOR %f in (a-*.gif); DO convert %f %{f/a/b} +append %f; done,但我仍然有麻烦。有什么建议?我正在使用的关于 FOR 循环的文档在这里 (imagemagick.org/Usage/windows/#for_loops),我正在使用的附加命令是:(imagemagick.org/discourse-server/viewtopic.php?t=11320)
    • ${f/a/b} 表示 "取 f 并将其中的所有 a 实例替换为 b" 并且特定于 bash(在 Linux )。你需要找到 Windows 的方式来做到这一点。
    • 感谢您的确认。是的,我注意到与我包含的链接的语法差异。我认为在 Windows 中,$ --> %。我会坚持下去的。
    • @MarkSetchell 有没有办法让这个过程适合多图像?我想在这种情况下,为每张图像提供一个像 a 和 b 这样的标签会很困难。假设我想并排合并当前目录中的所有 gif。我该怎么办?图像长度相同,所有帧大小相同
    • 希望您不在 Windows 上?
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多