J'utilise convert
pour créer un fichier PDF à partir d'environ 2000 images:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
Le processus se termine reproductible lorsque le fichier de sortie a atteint 2 ^ 31-1 octets (2 Go -1) avec le message
convert: unknown `out.pdf'.
La spécification du fichier PDF autorise ≈10 Go . J'ai essayé d'extraire plus d'informations -debug all
, mais je n'ai rien vu d'utile dans la sortie de journalisation. Le système de fichiers est ext3 qui permet des fichiers d'au moins jusqu'à 16 Gio (peut-être plus) . Quant à ulimit
, file size
est unlimited
. /etc/security/limits.conf
ne contient que des lignes commentées. Quoi d'autre peut provoquer cela et comment puis-je augmenter la limite?
Version d'ImageMagick: 6.4.3 2016-08-05
Distribution OpenMP Q16 : SLES 11.4 (i586)
linux
imagemagick
limit
Matthias Ronge
la source
la source
Réponses:
Votre limitation ne provient pas en effet du système de fichiers; ou à partir des versions de package, je pense .
Votre limite de 2 Go provient de vous en utilisant une version 32 bits de votre système d'exploitation.
L'option pour augmenter le fichier serait d'installer une version 64 bits si le matériel le prend en charge .
Voir Prise en charge des fichiers volumineux
la source
off_t
n'aidera pas si le logiciel essaie de créer tout le fichier en RAM et de l'écrire sur le disque en une seule fois.ptrdiff_t
) le sont, ce qui signifie effectivement que les tailles doivent être limitées à la valeur maximale (signée)ptrdiff_t
peut représenter, sinon vous obtenez des bogues UB et UB vraiment très désagréables que les applications n'ont pas bonne façon de contourner.Essayez de limiter le cache de pixels utilisé par
convert
exemple à 1 Gio:Espérons que cela forcera ImageMagic à vider régulièrement les données déjà traitées sur le disque au lieu d'essayer de placer plus de 2 Gio dans les tampons RAM.
BTW, la quantité de mémoire virtuelle disponible pour un seul processus sous Linux 32 bits est définie par le
VMSPLIT
paramètre de configuration du noyau. Cela peut être soit 2G / 2G (2 Go pour le noyau + 2 Go pour l'espace utilisateur) ou 1G / 3G (1 Go pour le noyau + 3 Go pour l'espace utilisateur). Sur un système en cours d'exécution, le paramètre peut être trouvé viaSur certains systèmes, la configuration du noyau est stockée à la
/boot/config-$(uname -r)
place.la source
Si ce n'était pas pour le grand nombre de photographies, vous pourriez utiliser TeX / LaTeX pour créer le PDF. Ensuite, vous pouvez toujours obtenir le même résultat (pdf d'images) sans le problème de crash du convertisseur. Les limites de fichiers sur TeX devraient être simplement votre système (matériel + OS)
Mais je pense que vous pourriez utiliser un script shell pour écrire le TeX:
0)
1) créez un modèle
1.1) Je suis sûr qu'il existe un moyen de faire cette étape en une seule fois, en remplaçant le nom de l'image par une variable et en l'insérant plutôt qu'en l'ajoutant, et à formater $ FOO pour avoir les bons 0 en tête, mais ce qui suit est exactement ce que je sais .
1.2) Le modèle doit être divisé pour que le script insère le nom du fichier
1.3) nano tmplt1 / * ou éditeur de votre choix * /
1.3.1) Cependant, vos fichiers vont 0001.miff… 0010.miff… 0100.miff… 2000.miff. C'est-à-dire un nombre variable de zéros non significatifs. Solution: 4 versions de tmplt1: tmplt1-9, tmplt10-99, tmplt100-999, tmplt1000-2000. Tmplt1-9 termine «... largeur] {000» (c'est-à-dire ajouter 3 0); tmplt10-99 termine "... largeur] {00" (c'est-à-dire ajouter 2 0). 100-999 ajoute 1 zéro et 1000-2000 est le même que tmplt1
1.4) partie suivante du modèle: nano tmplt2 / * OEOYC * /
1.5) partie suivante du modèle: nano tmplt3 / * OEOYC * /
1.6) modèle suivant: nano tmplt4 / * OEOYC * /
2) faire le début du fichier: nano head / * OEOYC * /
3) faire la fin du fichier: nano pied / * OEOYC * /
4) faire le script: nano loader / * OEOYC * /
5) Rendre le script exécutable: chmod u + x loader
5.1) Après avoir testé cela, j'ai constaté que chaque fois que $ FOO était inséré, il était réparti sur 3 lignes. Je ne connais pas d'autre solution que d'entrer dans le script et de supprimer manuellement les retours chariot. Au moins, c'est seulement 36 pour les 2000 photos
6) script d'appel: chargeur
7) compiler le TeX: pdflatex out.pdf
la source