linux - 如何从命令行使用 image magick (IM) 将大量 .img 文件转换为 gif

标签 linux image-processing command-line imagemagick remote-access

我有一组 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

原始答案

我认为我们可能必须逐步回答这个问题...这看起来像您的图片吗:

enter image description here

我是这样理解的:

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/

相关文章:

linux - Grep 使用帮助

linux - 使用 yum 安装特定版本的 gcc

linux - 如何在 Linux 中存储 lockfile 命令的 PID

c++ - OpenCV:如何创建 .vec 文件以与 opencv_traincascade 一起使用

python - 如何使用scikit-image使用最近的邻居插值来调整标记蒙版的大小

command-line - 批处理脚本 - 更改桌面上文件夹的图标 (Windows XP)

command-line - zsh 别名使用 localhost 端口打开 chrome

Linux命令行排队系统

bash - 使用 head 和 tail 命令显示选定的行

matlab - 如何用Matlab进行车牌定位?