ImageMagick“转换”功能一次不能裁剪超过300个文件

时间:2015-03-15 04:36:11

标签: ubuntu memory jpeg imagemagick-convert timelapse

我正在制作视频游戏中时光倒流。我拍的所有照片都是以4:3宽高比拍摄的.jpg图像。 2592x1944分辨率。我希望它们在1920x1080时是16:9。

我写了一个小脚本来做这个,以及拼凑一个视频,但我遇到了问题!

当我的文件少于300个时,这个脚本很有用,但是当我有更多文件时,我用来裁剪图像的“转换”命令只会占用所有内存并冻结我的电脑(8GB RAM),一切都没有裁剪一张照片!

总共有大约30万张照片......我计划分批拍摄约50,000张照片。所以这显然是一个必须克服的问题。但是现在我正在测试约700张照片。

这是我写的脚本。我正在运行Ubuntu 14.04

请注意,我已将问题确定为在“转换”功能期间发生。如果我在脚本的其余部分之外运行它,它仍然会发生。

mkdir resized

echo Begin Resizing!
mogrify -path resized -resize 1920x1440! *.JPG #Resizes all files, maintaining 4:3 aspect ratio

echo Resizing Complete! Begin Cropping!
cd resized
convert *.JPG -crop 1920x1080+0+$1 D$2P$3 #Crops all 4:3 files to 16:9 aspect ratio. Takes command line arguments for cropping dimensions and filename (Memory leaks, can't crop ? 300 images!)

echo Cropping Complete!
mkdir cropped
mv D* cropped/ #Moves all cropped photos into new directory
cd cropped
find . -type f -exec mv '{}' '{}'.JPG \; #Adds '.JPG' to each filename
ls *.JPG -1tr > files.txt #Creates List of files

echo MAKING VIDEO!
mencoder -nosound -noskip -oac copy -ovc copy -o output.avi -mf fps=30 'mf://@files.txt' #Creates .avi video from jpg images (very fast)
#avconv -i output.avi -c:v libx264 -preset slow -crf 15 output-final.mkv #Converts .avi to .mkv video (Very Slow - looking for better method than making 2 vids)

echo ---------
echo ALL DONE! 
echo ---------

我玩弄了它,发现300-350张图片似乎完全冻结了电脑。

这个问题是我最大的问题 - 但还有两个问题有些相关。解决第一个可能涉及绕过这个问题。

  1. 我目前调整每张照片的大小,将其另存为新文件,然后裁剪,将其保存为另一个文件。由于我将同时处理约50,000张照片......这将变得很麻烦。无论如何,我可以一次裁剪和调整照片大小?然而,这是-crucial-我可以指定照片裁剪的确切位置。我不能只从顶部和底部裁剪出相同数量的金额。

  2. 我目前正在制作视频,这是我可以开始工作的唯一过程 - 从jpgs制作一个.avi文件,然后制作第二个视频。这也是一个明显不必要的步骤,但我不确定如何直接使用.mkv(或更好,一个.mp4)。这个问题可能最终没有实际意义,因为我正在寻找非终端解决方案来制作照片中的实际视频(即Sony Vegas和GoPro Studio)。

2 个答案:

答案 0 :(得分:0)

将* .JPG替换为文件循环,以便每次都退出。这样你可以避免这个问题。

示例(未经测试):

#!/bin/bash
FILES=/path/to/*.JPG
for f in $FILES
do
    convert $f -crop 1920x1080+0+$1 D$2P$3
done

答案 1 :(得分:0)

也许在内存上设置一些限制并定义一个临时路径会有所帮助。

我做了大约1200张图片,没有任何问题。

convert -monitor -limit memory 2GiB -limit map 4GiB -define registry:temporary-path=/data/tmp *.JPG -crop 1920x1080+0+$1 D$2P$3

http://www.imagemagick.org/script/command-line-options.php#limit

http://www.imagemagick.org/script/command-line-options.php#define