Saya menggunakan convert
untuk membuat file PDF dari sekitar 2.000 gambar:
convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf
Proses ini mengakhiri reproducible ketika file output telah mencapai 2 ^ 31-1 byte (2 GB −1) dengan pesan
convert: unknown `out.pdf'.
Spesifikasi file PDF memungkinkan untuk ≈10 GB . Saya mencoba menarik lebih banyak informasi dari -debug all
, tetapi saya tidak melihat sesuatu membantu dalam hasil logging. Sistem file adalah ext3 yang memungkinkan untuk file setidaknya hingga 16 GiB (mungkin lebih) . Adapun ulimit
, file size
adalah unlimited
. /etc/security/limits.conf
hanya berisi baris komentar. Apa lagi yang bisa menyebabkan ini dan bagaimana saya bisa menambah batas?
Versi ImageMagick: 6.4.3 2016-08-05 Q16
Distribusi OpenMP : SLES 11.4 (i586)
linux
imagemagick
limit
Matthias Ronge
sumber
sumber
Jawaban:
Keterbatasan Anda memang tidak berasal dari sistem file; atau dari versi paket saya pikir .
Batas 2GB Anda berasal dari Anda menggunakan versi 32-bit OS Anda.
Opsi untuk menambah file akan menginstal versi 64-bit jika perangkat keras mendukungnya .
Lihat Dukungan file besar
sumber
off_t
tidak akan membantu jika perangkat lunak mencoba membuat seluruh file dalam RAM dan menulisnya ke disk dalam sekali jalan.ptrdiff_t
) adalah, yang berarti secara efektif bahwa ukuran harus dibatasi pada nilai maksimum (ditandatangani) yangptrdiff_t
dapat diwakilkan, atau Anda mendapatkan bug UB dan UB yang benar-benar buruk yang aplikasi tidak punya cara yang baik untuk bekerja.Coba batasi cache piksel yang digunakan oleh
convert
misalnya 1 GiB:Semoga ini akan memaksa ImageMagic untuk secara teratur membuang data yang sudah diproses pada disk alih-alih mencoba memuat lebih dari 2 GiB dalam buffer RAM.
BTW, jumlah memori virtual yang tersedia untuk satu proses di Linux 32-bit ditentukan oleh
VMSPLIT
pengaturan konfigurasi kernel. Ini bisa berupa 2G / 2G (2GB untuk kernel + 2GB untuk userland) atau 1G / 3G (1 GB untuk kernel + 3 GB untuk userland). Pada sistem yang sedang berjalan, pengaturan dapat ditemukan melaluiPada beberapa sistem, konfigurasi kernel disimpan
/boot/config-$(uname -r)
sebagai gantinya.sumber
Jika bukan karena banyaknya foto, Anda dapat menggunakan TeX / LaTeX untuk membuat PDF. Maka Anda masih bisa mendapatkan hasil yang sama (pdf gambar) tanpa masalah konverter crash. Batas file pada TeX seharusnya menjadi sistem Anda (perangkat keras + OS)
Tapi saya pikir Anda bisa menggunakan skrip shell untuk menulis TeX:
0)
1) membuat templat
1.1) Saya yakin ada cara untuk melakukan langkah ini dalam sekali jalan, dengan mengganti nama gambar dengan variabel dan memasukkan daripada menambahkan, dan memformat $ FOO untuk memiliki 0 yang benar, tetapi berikut ini hanya apa yang saya tahu .
1.2) Templat perlu dipisah agar skrip memasukkan nama file
1.3) nano tmplt1 / * atau editor pilihan Anda * /
1.3.1) Namun, file Anda pergi 0001.miff ... 0010.miff ... 0100.miff ... 2000.miff. Yaitu sejumlah variabel nol terkemuka. Penanganan masalah: 4 versi tmplt1: tmplt1-9, tmplt10-99, tmplt100-999, tmplt1000-2000. Tmplt1-9 berakhir "... lebar] {000" (yaitu, tambahkan 3 0); tmplt10-99 berakhir "... lebar] {00" (yaitu, tambahkan 2 0). 100-999 menambahkan 1 nol dan 1000-2000 sama dengan tmplt1
1.4) bagian selanjutnya dari templat: nano tmplt2 / * OEOYC * /
1.5) bagian selanjutnya dari templat: nano tmplt3 / * OEOYC * /
1.6) templat berikutnya: nano tmplt4 / * OEOYC * /
2) buat awal dari file: nano head / * OEOYC * /
3) buat akhir file: nano foot / * OEOYC * /
4) buat skrip: nano loader / * OEOYC * /
5) membuat skrip dapat dieksekusi: chmod u + x loader
5.1) Setelah menguji ini, saya menemukan bahwa setiap kali $ FOO dimasukkan, itu tersebar di 3 baris. Saya tidak tahu solusi apa pun selain masuk ke skrip dan menghapus secara manual pengembalian carriage. Setidaknya hanya 36 untuk semua 2000 foto
6) skrip panggilan: loader
7) kompilasi TeX: pdflatex out.pdf
sumber