Estou usando convert
para criar um arquivo PDF a partir de cerca de 2.000 imagens:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
O processo termina reproduzível quando o arquivo de saída atinge 2 ^ 31-1 bytes (2 GB -1) com a mensagem
convert: unknown `out.pdf'.
A especificação do arquivo PDF permite ± 10 GB . Tentei obter mais informações -debug all
, mas não vi nada útil na saída do log. O sistema de arquivos é ext3, que permite arquivos com pelo menos 16 GiB (pode ser mais) . Quanto a ulimit
, file size
é unlimited
. /etc/security/limits.conf
contém apenas linhas comentadas. O que mais pode causar isso e como posso aumentar o limite?
Versão do ImageMagick: 6.4.3-05-08 2016 Q16
Distribuição do OpenMP : SLES 11.4 (i586)
linux
imagemagick
limit
Matthias Ronge
fonte
fonte
Respostas:
Sua limitação não deriva de fato do sistema de arquivos; ou de versões de pacotes, eu acho .
Seu limite de 2 GB vem de você usando uma versão de 32 bits do seu sistema operacional.
A opção para aumentar o arquivo seria instalar uma versão de 64 bits se o hardware suportar .
Consulte Suporte a arquivos grandes
fonte
off_t
não ajudará se o software tentar criar o arquivo inteiro na RAM e gravá-lo no disco de uma só vez.ptrdiff_t
) são, o que significa efetivamente que os tamanhos devem ser limitados ao valor máximo (assinado)ptrdiff_t
pode representar, ou então você recebe bugs realmente desagradáveis relacionados a UB e UB que os aplicativos não têm boa maneira de contornar.Tente limitar o cache de pixels usado por,
convert
por exemplo, 1 GiB:Espero que isso force o ImageMagic a despejar regularmente os dados já processados no disco, em vez de tentar ajustar mais de 2 GiB nos buffers de RAM.
BTW, a quantidade de memória virtual disponível para um único processo no Linux de 32 bits é definida pela
VMSPLIT
configuração do kernel. Pode ser 2G / 2G (2 GB para o kernel + 2 GB para a terra do usuário) ou 1G / 3G (1 GB para o kernel + 3 GB para a terra do usuário). Em um sistema em execução, a configuração pode ser encontrada viaEm alguns sistemas, a configuração do kernel é armazenada
/boot/config-$(uname -r)
.fonte
Se não fosse o grande número de fotografias, você poderia usar o TeX / LaTeX para criar o PDF. Então você ainda pode obter o mesmo resultado (pdf de imagens) sem o problema de falha do conversor. Os limites de arquivo no TeX devem ser apenas o seu sistema (hardware + SO)
Mas acho que você poderia usar um shell script para escrever o TeX:
0)
1) faça um modelo
1.1) Tenho certeza de que há uma maneira de executar essa etapa de uma só vez, substituindo o nome da imagem por variável e inserindo, em vez de anexando, e formatando $ FOO para ter os 0s iniciais corretos, mas a seguir é exatamente o que eu sei .
1.2) O modelo precisa ser dividido para que o script insira o nome do arquivo
1.3) nano tmplt1 / * ou editor de sua escolha * /
1.3.1) No entanto, seus arquivos ficam 0001.miff… 0010.miff… 0100.miff… 2000.miff. Ou seja, um número variável de zeros à esquerda. Solução alternativa: 4 versões do tmplt1: tmplt1-9, tmplt10-99, tmplt100-999, tmplt1000-2000. Tmplt1-9 termina "... width] {000" (ou seja, adicione 3 0's); tmplt10-99 termina “... width] {00” (ou seja, adicione 2 0's). 100-999 adiciona 1 zero e 1000-2000 é o mesmo que tmplt1
1.4) próxima parte do modelo: nano tmplt2 / * OEOYC * /
1.5) próxima parte do modelo: nano tmplt3 / * OEOYC * /
1.6) próximo modelo: nano tmplt4 / * OEOYC * /
2) faça o início do arquivo: nano head / * OEOYC * /
3) faça o final do arquivo: nano foot / * OEOYC * /
4) faça o script: nano loader / * OEOYC * /
5) torne o script executável: chmod u + x loader
5.1) Depois de testar isso, descobri que toda vez que $ FOO era inserido, ele se espalhava por três linhas. Não conheço nenhuma solução alternativa a não ser entrar no script e excluir manualmente os retornos de carro. Pelo menos são apenas 36 para todas as 2.000 fotos
6) script de chamada: carregador
7) compile o TeX: pdflatex out.pdf
fonte