我有一组 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。
转换:没有定义图像 d263g_07.gif @error/convert.c/ConvertImageCommand/3257。
有没有办法在 IM 中处理 img 格式?在他们的文档中似乎它不是受支持的文件类型,但其他谷歌搜索说 .img 图像在格式上非常接近位图。我想知道是否有管道选项或其他东西可以让我实现我的目标?
编辑:这些图像直接来自 CMOS 衍射图案检测器(x 射线晶体学)。 我也刚刚发现了一个隐藏的 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
输出为电影/视频
如果您想尝试输出视频/电影而不是动画 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
关于linux - 如何从命令行使用 image magick (IM) 将大量 .img 文件转换为 gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160484/