我正在制作一个视频游戏中时光倒流。我拍摄的所有照片都是以 4:3 纵横比拍摄的 .jpg 图像。2592x1944 分辨率。我希望它们在 1920x1080 时为 16:9。
我已经写了一个小脚本来做到这一点,以及拼凑一个视频,但我遇到了问题!
当我的文件少于 300 个时,此脚本效果很好,但当我有更多文件时,我用来裁剪图像的“转换”命令只会占用所有内存并冻结我的计算机(使用 8GB RAM),所有这些都没有裁剪一张照片!
总共有大约 300,000 张照片……我计划分批制作,每批大约 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 图像似乎是它完全冻结计算机的地方。
这个问题是我最大的问题 - 但还有两个问题有些相关。解决第一个问题可能涉及绕过这个问题。
我目前调整每张照片的大小,将其另存为新文件,然后对其进行裁剪,将其另存为另一个文件。因为我要一次处理约 50,000 张照片……这会变得很麻烦。无论如何,我可以一次裁剪和调整照片大小?但是,至关重要的是,我能够指定裁剪照片的确切位置。我不能只从顶部和底部裁剪等量。
我目前正在将其制作成视频,这是我可以开始工作的唯一过程 - 从 jpg 制作一个 .avi 文件,然后制作从该文件转换而来的第二个视频。这也是一个明显不必要的步骤,但我不确定如何直接访问 .mkv(或者更好的 .mp4)。这个问题最终可能没有实际意义,因为我正在研究非终端解决方案以从照片中制作实际视频(即 Sony Vegas 和 GoPro Studio)。