Ich benutze convert
, um eine PDF-Datei aus ca. 2.000 Bildern zu erstellen:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
Der Vorgang wird reproduzierbar beendet, wenn die Ausgabedatei mit der Meldung 2 ^ 31-1 Byte (2 GB −1) erreicht hat
convert: unknown `out.pdf'.
Die PDF-Dateispezifikation ermöglicht 10 GB . Ich habe versucht, mehr Informationen abzurufen -debug all
, habe jedoch keine hilfreichen Informationen in der Protokollausgabe gefunden. Das Dateisystem ist ext3, das Dateien mit mindestens 16 GiB (möglicherweise mehr) zulässt . In Bezug auf ulimit
, file size
ist unlimited
. /etc/security/limits.conf
enthält nur auskommentierte Zeilen. Was kann das noch bewirken und wie kann ich das Limit erhöhen?
ImageMagick Version: 6.4.3 05.08.2016 Q16 OpenMP-
Distribution: SLES 11.4 (i586)
linux
imagemagick
limit
Matthias Ronge
quelle
quelle
Antworten:
Ihre Einschränkung beruht in der Tat nicht auf dem Dateisystem. oder von Paketversionen denke ich .
Das Limit von 2 GB wird von Ihnen mit einer 32-Bit-Version Ihres Betriebssystems festgelegt.
Die Option zum Vergrößern der Datei besteht darin, eine 64-Bit-Version zu installieren, wenn die Hardware dies unterstützt .
Siehe Unterstützung großer Dateien
quelle
off_t
hilft nicht, wenn die Software versucht, die gesamte Datei im RAM zu erstellen und auf einmal auf die Festplatte zu schreiben.ptrdiff_t
) bedeuten, dass Größen effektiv auf den maximalen (signierten) Wert begrenzt werden müssenptrdiff_t
, sonst bekommen Sie wirklich wirklich böse UB- und UB-bezogene Fehler, die Anwendungen nicht haben gute Möglichkeit, umzugehen.Versuchen Sie, den verwendeten Pixel-Cache
convert
auf z. B. 1 GB zu beschränken:Hoffentlich zwingt dies ImageMagic, bereits verarbeitete Daten regelmäßig auf der Festplatte abzulegen, anstatt zu versuchen, mehr als 2 GiB in RAM-Puffer zu packen.
Übrigens wird die Menge an virtuellem Speicher, die einem einzelnen Prozess unter 32-Bit-Linux zur Verfügung steht, durch die
VMSPLIT
Kernel-Konfigurationseinstellung festgelegt. Dies kann entweder 2G / 2G (2 GB für Kernel + 2 GB für Userland) oder 1G / 3G (1 GB für Kernel + 3 GB für Userland) sein. Auf einem laufenden System kann die Einstellung über gefunden werdenAuf einigen Systemen wird
/boot/config-$(uname -r)
stattdessen die Kernel-Konfiguration gespeichert .quelle
Wenn es nicht die große Anzahl von Fotos gäbe, könnten Sie TeX / LaTeX verwenden, um das PDF zu erstellen. Dann können Sie immer noch das gleiche Ergebnis (PDF-Bild) erzielen, ohne dass der Konverter abstürzt. Die Dateibeschränkungen unter TeX sollten nur Ihrem System (Hardware + Betriebssystem) entsprechen.
Aber ich denke, Sie könnten ein Shell-Skript verwenden, um das TeX zu schreiben:
0)
1) erstelle eine Vorlage
1.1) Ich bin mir sicher, dass es eine Möglichkeit gibt, diesen Schritt in einem Schritt durchzuführen, indem der Bildname durch eine Variable ersetzt und statt eines Anhängens eingefügt wird und $ FOO formatiert wird, um die richtigen führenden Nullen zu erhalten, aber das Folgende ist genau das, was ich weiß .
1.2) Die Vorlage muss geteilt werden, damit das Skript den Dateinamen einfügen kann
1.3) nano tmplt1 / * oder Editor Ihrer Wahl * /
1.3.1) Ihre Dateien sind jedoch 0001.miff… 0010.miff… 0100.miff… 2000.miff. Dh eine variable Anzahl führender Nullen. Problemumgehung: 4 Versionen von tmplt1: tmplt1-9, tmplt10-99, tmplt100-999, tmplt1000-2000. Tmplt1-9 endet "... width] {000" (dh addiere 3 0's); tmplt10-99 endet "... width] {00" (dh addiere 2 0's). 100-999 addiert 1 Null und 1000-2000 ist dasselbe wie tmplt1
1.4) nächster Teil der Vorlage: nano tmplt2 / * OEOYC * /
1.5) nächster Teil der Vorlage: nano tmplt3 / * OEOYC * /
1.6) nächste Vorlage: nano tmplt4 / * OEOYC * /
2) mach den Anfang der Datei: nano head / * OEOYC * /
3) mache das Ende der Datei: nano foot / * OEOYC * /
4) Mach das Skript: nano loader / * OEOYC * /
5) Skript ausführbar machen: chmod u + x loader
5.1) Nachdem ich dies getestet hatte, stellte ich fest, dass jedes Mal, wenn $ FOO eingefügt wurde, es über 3 Zeilen verteilt war. Ich kenne keine andere Möglichkeit, als das Skript aufzurufen und die Zeilenumbrüche manuell zu löschen. Zumindest sind es nur 36 für alle 2000 Fotos
6) Script aufrufen: Loader
7) kompiliere das TeX: pdflatex out.pdf
quelle