在 imagemagick 中将 .eps 批量转换为 .jpg 并制作 .mkv

Batch converting .eps to .jpg in imagemagick and making .mkv

我正在尝试将多个 .eps 文件转换为 .jpg 文件。通过查看 SO 中的答案,我能够针对单个单独的文件执行此操作。

问题是,当我尝试对所有文件执行此操作时,它们不显示任何 .jpg 文件。

我目前正在通过命令使用 Imagemagick

convert -density 300 outputs-000.eps -flatten outputs-000.jpg

我认为问题是因为我的文件写成

outputs-000.eps
outputs-001.eps
outputs-002.eps
outputs-003.eps
...
outputs-145.eps
...

等等。我尝试放置 %d(如 outputs-%d.eps 和 outputs-%d.jpg),但没有成功。

除此之外,我打算将所有这些文件 "convert" 转换为 .mkv 或 .gif 或类似类型(它们是粒子碰撞系统时间配置的图像,因此每个图像是一帧,所以目标是将它制作成 10 秒的电影)。如果有办法直接从 .eps 执行此操作,那就更好了。欢迎任何帮助,因为我已经尝试这样做了几个小时了。谢谢。

您应该可以像这样一次性制作 GIF 动画:

convert -density 300 outputs-*eps -delay 200 animated.gif

否则,您应该能够将所有 eps 文件转换为 PNG,其中:

mogrify -density 300 -format png outputs-*eps

小心 mogrify - 它会覆盖你的输入文件,除非你为输出目录指定 -path,或者你更改格式 - 就像我刚刚对 PNG.

所做的那样

对于任何登陆这里试图弄清楚如何解决 ImageMagic 的 convert: not authorized 而不恢复对系统范围的安全策略所做的更改以关闭漏洞的人,这里是你如何使用 Ghostscript直接进行批量 EPS-to-JPEG 转换,而无需将 ImageMagick 引入混合:

gs -dSAFER -dEPSCrop -r300 -sDEVICE=jpeg -o outputs-%03d.jpg outputs-*.eps
  • -dSAFER 将 Ghostscript 置于沙盒模式,其中 Postscript 代码只能与您在命令行中指定的文件进行交互。 (是的,定义页面内容的 EPS、PS 和 PDF 文件的部分 are in a turing-complete programming language。)
  • -dEPSCrop 要求将渲染的输出裁剪到绘图的边界框,而不是填充到 Ghostscript 希望您打印到的任何大小的页面。 (有关详细信息,请参阅 the manual。)
  • -r300 要求 300 DPI(-r600 要求 600 DPI,等等)
  • -sDEVICE指定输出格式(其他选择见手册Devices section
  • -o-dBATCH -dNOPAUSE -sOutputFile=
  • 的 shorthand
  • This section of the Ghostscript manual gives some example formats for for multi-file filename output but, for the actual syntax definition, it points you at the documentation for the C printf(3) 函数。

获得 JPEG 后,您可以按照 this answer over on the Video Production Stack Exchange 中的说明将它们组合成 MKV 文件。

TL;DR 是这里的命令:

ffmpeg -framerate 30 -i outputs-%03d.jpg -codec copy output.mkv

如果您想要执行帧间压缩而不是为了避免再次转码 JPEG,请查看其他答案。

(如果你想要最好的折衷方案,让 Ghostscript 输出 PNG,然后让 ffmpeg 处理切换到有损压缩。)