convert
を使用してPDF約2,000の画像からファイルを作成しています:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
出力ファイルが次のメッセージで2 ^ 31-1バイト(2 GB -1)に達すると、プロセスは再現可能で終了します。
convert: unknown `out.pdf'.
PDFファイル指定 ≈10GBを許可 。-debug all
から詳細情報を取得しようとしましたが、ログに役立つ情報がありませんでした出力。ファイルシステムはext3で、これは 少なくとも16までのファイルを許可しますGiB(おそらくそれ以上)) 。ulimit
に関しては、file size
はunlimited
です。/etc/security/limits.conf
にはコメント化された行のみが含まれます。他に何がこれを引き起こす可能性がありますか制限を増やすにはどうすればよいですか?
ImageMagickバージョン:6.4.3 2016-08-05 Q16 OpenMP
配布:SLES 11.4(i586)
あなたの制限は確かにファイルシステムに由来するものではありません。またはパッケージバージョンから私は思います。
2 GBの制限は、32ビットバージョンのOSを使用している場合に発生します。
ファイルを増やすオプションは、ハードウェアがそれをサポートしている場合、64ビットバージョンをインストールすることです。
参照 大きなファイルのサポート
従来、多くのオペレーティングシステムとその基盤となるファイルシステムの実装では、32ビット整数を使用してファイルのサイズと位置を表していました。したがって、2を超えるファイルはありません。32 − 1バイト(4 GB − 1)。多くの実装では、サイズを符号付き数値として扱うことで問題が悪化し、さらに制限が2に低下しました。31 − 1バイト(2 GB − 1)。
convert
が使用するピクセルキャッシュを、たとえば1 GiB:
_convert 0001.miff ... 2000.miff -limit memory 1GiB -limit map 1GiB -compress jpeg -quality 80 out.pdf
_
うまくいけば、これにより、ImageMagicは、2つ以上GiB in RAM buffers。
ところで、32ビットLinuxの単一プロセスで使用できる仮想メモリの量は、VMSPLIT
カーネル構成設定によって定義されます。これは、2G/2G(カーネル用2GB +ユーザーランド用2GB)または1G/3G(カーネル用1GB +ユーザーランド用3GB)のいずれかです。実行中のシステムでは、設定は
_zcat /proc/config.gz | grep VMSPLIT
_
一部のシステムでは、カーネル構成は代わりに/boot/config-$(uname -r)
に保存されます。
膨大な数の写真が必要でない場合は、TeX/LaTeXを使用してPDFを作成できます。その後、コンバーターのクラッシュの問題なしに、同じ結果(画像のPDF)を取得できます。 TeXのファイル制限は、ご使用のシステム(ハードウェア+ OS)のみである必要があります
しかし、シェルスクリプトを使用してTeXを記述できると思います。
0)
mkdir convert
pushd convert
PATH=convert:$PATH /* keep everything in one directory for tidyness.*/
1)テンプレートを作成する
1.1)イメージ名を変数で置き換え、追加ではなく挿入することで、このステップを一度に実行し、正しい先頭に0が付くように$ FOOをフォーマットする方法があると確信していますが、以下は私が知っていることです。
1.2)スクリプトがファイル名を挿入するためには、テンプレートを分割する必要があります
1.3)nano tmplt1/*または任意のエディター* /
/* white space line */
\begin{figure}[h!]
\includegraphics[width=0.5\linewidth]{
/* at this point the script will insert $FOO, the file name variable */
1.3.1)ただし、ファイルは0001.miff…0010.miff…0100.miff…2000.miffになります。つまり、可変数の先行ゼロ。回避策:tmplt1の4つのバージョン:tmplt1-9、tmplt10-99、tmplt100-999、tmplt1000-2000。 Tmplt1-9は「... width] {000」で終わります(つまり、3つの0を追加します); tmplt10-99は、「... width] {00」で終了します(つまり、2つの0を追加します)。 100-999は1つのゼロを追加し、1000-2000はtmplt1と同じです
1.4)テンプレートの次の部分:nano tmplt2/* OEOYC * /
.miff}
\caption{ /* if you want to caption, otherwise skip to tmplt3.
Same again, script will insert $FOO here */
1.5)テンプレートの次の部分:nano tmplt3/* OEOYC * /
}
\label{f: /*if you want them labelled which is actually
a index/reference for the text to refer to, not a caption.
Same again, the script will insert $FOO here. If you do not
want labels, skip to tmplt4*/
1.6)次のテンプレート:nano tmplt4/* OEOYC * /
}
\end{figure}
2)ファイルの先頭を作成します:nano head/* OEOYC * /
\documentclass{article} /* Or more suitable class */
\usepackage{graphicx}
\begin{document}
/* white space line*/
3)ファイルの終わりを作成します:nano foot/* OEOYC * /
\end {document}
4)スクリプトを作成します:nano loader/* OEOYC * /
#! /bin/bash
cat head > out.pdf
for FOO in {1...9}
do
cat tmplt1-9 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt2 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt3 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt4 >> out.pdf
done
for FOO in {10...99}
do
cat tmplt10-99 >> out.pdf /* this looks like a lot but
is actually copy-paste of first block, just add relevant 0's and 9's */
echo "$FOO" | cat >> out.pdf
cat tmplt2 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt3 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt4 >> out.pdf
done
for FOO in {100...999}
do
cat tmplt100-999 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt2 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt3 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt4 >> out.pdf
done
for FOO in {1000...2000}
do
cat tmplt1000-2000 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt2 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt3 >> out.pdf
echo "$FOO" | cat >> out.pdf
cat tmplt4 >> out.pdf
done
cat foot >> out.pdf
5)スクリプトを実行可能にします:chmod u + xローダー
5.1)これをテストした後、$ FOOが挿入されるたびに、それが3行にまたがっていることがわかりました。スクリプトに移動して手動で改行を削除する以外の回避策はわかりません。 2000枚の写真すべてで少なくとも36枚
6)スクリプトを呼び出す:ローダー
7)TeXをコンパイルします:pdflatex out.pdf