如何从命令行使用 image magick (IM) 将大量 .img 文件转换为 gif
How to convert a large series of .img files to a gif with image magick (IM) from command line
我有一组 1800 张图片(每张 16Mb,.img 类型)。
我想从命令行将它们转换为 gif,因为我远程连接到存储它们的服务器并且下载所有它们(用于本地程序)是不可行的。我无法在服务器上安装新程序,但它安装了 imagemagick (IM)。
当我尝试标准命令时:convert -resize 20% -delay 5 -loop 0 /pwd/*.img output.gif
我得到一个错误no decode delegate for this image format IMG @ error/constitute.c/ReadImage/504.
convert: no images defined d263g_07.gif @ error/convert.c/ConvertImageCommand/3257.
有没有办法在 IM 中处理 img 格式?在他们的文档中似乎它不是受支持的文件类型,但其他谷歌搜索说 .img 图像在格式上非常接近位图。我想知道是否有管道选项或其他东西可以让我实现我的目标?
编辑:这些图像直接来自衍射图案(x 射线晶体学)的 CMOS 检测器。
我也刚刚发现了一个隐藏的 imageJ 可执行文件。因此,如果它提供了 IM 不可用的选项,那也可能是一个解决方案。
作为第一次尝试,我认为您需要以下方面的信息:
#!/bin/bash
for f in *img; do
cat "$f" | convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 MIFF:-
done | convert - -delay 80 result.gif
您可能需要降低质量或子样本帧或进一步减小尺寸以获得可接受的 GIF 尺寸。要减小大小,可以将其更改为 -resize 500x
。或者为了降低质量(并因此降低大小),添加 -quality 75%
或类似内容。看看你过得怎么样,然后回来汇报!
因此,将以上内容保存在您的 HOME(登录)目录中名为 go
的文件中,然后执行以下命令(仅一次)以使其可执行:
chmod +x $HOME/go
然后,进入存放图片的目录,例如:
cd /some/place/images
和 运行 通过键入脚本:
$HOME/go
过一会儿它有望完成,动画 GIF 将被调用 result.gif
。如果您仍然有问题,请按原样复制下面的每一行,然后将它们一次一行地粘贴到您的终端中:
for f in *img; do cat "$f" |
convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 MIFF:- done |
convert - -delay 80 result.gif
我不知道你安装了哪些查看器,但你可以试试:
feh results.gif
输出为movie/video
如果您想尝试输出 video/movie 而不是动画 GIF,您应该可以使用 ffmpeg
来实现。该命令看起来很像这样:
#!/bin/bash
for f in *img; do
cat "$f" | convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 ppm:-
done | ffmpeg -f image2pipe -framerate 30 -i - -c:v libx264 -pix_fmt yuv420p test.mp4
原答案
我认为我们可能必须逐步回答这个问题...这看起来像您的图片吗:
我是这样理解的:
convert -depth 16 -size 2952x2820+3072 gray:- -normalize a.jpg < ~/Desktop/d263g-07_1_0001.img
我有一组 1800 张图片(每张 16Mb,.img 类型)。
我想从命令行将它们转换为 gif,因为我远程连接到存储它们的服务器并且下载所有它们(用于本地程序)是不可行的。我无法在服务器上安装新程序,但它安装了 imagemagick (IM)。
当我尝试标准命令时:convert -resize 20% -delay 5 -loop 0 /pwd/*.img output.gif
我得到一个错误no decode delegate for this image format IMG @ error/constitute.c/ReadImage/504.
convert: no images defined d263g_07.gif @ error/convert.c/ConvertImageCommand/3257.
有没有办法在 IM 中处理 img 格式?在他们的文档中似乎它不是受支持的文件类型,但其他谷歌搜索说 .img 图像在格式上非常接近位图。我想知道是否有管道选项或其他东西可以让我实现我的目标?
编辑:这些图像直接来自衍射图案(x 射线晶体学)的 CMOS 检测器。 我也刚刚发现了一个隐藏的 imageJ 可执行文件。因此,如果它提供了 IM 不可用的选项,那也可能是一个解决方案。
作为第一次尝试,我认为您需要以下方面的信息:
#!/bin/bash
for f in *img; do
cat "$f" | convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 MIFF:-
done | convert - -delay 80 result.gif
您可能需要降低质量或子样本帧或进一步减小尺寸以获得可接受的 GIF 尺寸。要减小大小,可以将其更改为 -resize 500x
。或者为了降低质量(并因此降低大小),添加 -quality 75%
或类似内容。看看你过得怎么样,然后回来汇报!
因此,将以上内容保存在您的 HOME(登录)目录中名为 go
的文件中,然后执行以下命令(仅一次)以使其可执行:
chmod +x $HOME/go
然后,进入存放图片的目录,例如:
cd /some/place/images
和 运行 通过键入脚本:
$HOME/go
过一会儿它有望完成,动画 GIF 将被调用 result.gif
。如果您仍然有问题,请按原样复制下面的每一行,然后将它们一次一行地粘贴到您的终端中:
for f in *img; do cat "$f" |
convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 MIFF:- done |
convert - -delay 80 result.gif
我不知道你安装了哪些查看器,但你可以试试:
feh results.gif
输出为movie/video
如果您想尝试输出 video/movie 而不是动画 GIF,您应该可以使用 ffmpeg
来实现。该命令看起来很像这样:
#!/bin/bash
for f in *img; do
cat "$f" | convert -depth 16 -size 2952x2820+3072 gray:- -resize 800x -normalize -depth 8 ppm:-
done | ffmpeg -f image2pipe -framerate 30 -i - -c:v libx264 -pix_fmt yuv420p test.mp4
原答案
我认为我们可能必须逐步回答这个问题...这看起来像您的图片吗:
我是这样理解的:
convert -depth 16 -size 2952x2820+3072 gray:- -normalize a.jpg < ~/Desktop/d263g-07_1_0001.img