Python script that converts compressed CBR and CBZ comic archives to stored CBZ
Requires: Python 3.2+, unrar utility
Optional requirements: Imagemagick identify and convert programs for --shrink
OS: Linux (and probably Mac OS X).
Bug with an issue if you want Windows and want to do some testing.
To reduce decompression space and power requirements ComicRack for Android recommends CBZ archives without compression.
Images in archives are typically compressed, so using zip/rar compression saves as little as 1-2%.
cbr2cbz will take a source folder of CBR files and convert to CBZ (output goes to a new folder).
Note: Output file names are converted to ANSI. Let me know if you need unicode support on the [Github page]: https://github.com/Dapbler/cbr2cbz
Currently GNU/Linux, but uses mostly OS agnostic modules so should be relatively easy to convert to Windows (subprocess commands will need modification).
Additional optional features include:
- Convert existing CBZ files to uncompressed CBZ
- Copy non CBR/CBZ files
- Flat mode - output all files in the top level of the destination folder
- Pattern matching to decide what files to copy/convert (multiple pattern optons may be set and all are checked)
- Including/exclude archived page names matching regular expressions (eg. include pages 001-009 for a test sample)
- Shrinking of page (lossy conversion) for non-archival use on devices with limited storage/memory (often reducing size by 85%)
- Shrinking heuristics and compression settings now exposed via --shrinkXXXX settings
usage: cbr2cbz.py [-h] [--examples] [-c] [--noconvert] [-z] [--shrink]
[--shrinkKB SHRINKKB] [--shrinkQual SHRINKQUAL]
[--shrinkHeight SHRINKHEIGHT] [-f] [-m MATCH] [-e EXCLUDE]
[--matchpage MATCHPAGE] [--matchpagefile MATCHPAGEFILE]
[--excludepage EXCLUDEPAGE]
[--excludepagefile EXCLUDEPAGEFILE] [--cs] [-v] [-w]
source dest
Converts, copies or shrinks CBR/CBZ archives to stored CBZ
positional arguments:
source source file or directory
dest destination directory
optional arguments:
-h, --help show this help message and exit
--examples view this help with additional examples (requires
dummy source/destination arguments)
-c, --copy copy non CBR files to destination
--noconvert copy CBR/CBZ instead of converting (implies -c)
-z, --zipforce re-zip CBZ archives (remove wasteful compression)
--kb, --keep-broken [EXPERIMENTAL] attempt to convert corrupt (RAR) archives
--shrink [ WARNING - LOSSY ] aggressively shrink large page
files with JPEG
--shrinkKB SHRINKKB with --shrink process pages larger than this many KB
(default = 300)
--shrinkQual SHRINKQUAL
with --shrink use custom JPEG quality (default = 40)
--shrinkHeight SHRINKHEIGHT
with --shrink sets maximum pixel height of page
(default = 1500)
-f, --flat Flat mode - do not create output subdirectories
-m MATCH, --match MATCH
only process paths matching Regular Expression
-e EXCLUDE, --exclude EXCLUDE
exclude source files matching Regular Expression
--matchpage MATCHPAGE
include only page matching Regular Expression
--matchpagefile MATCHPAGEFILE
include pages matching RE in file
--excludepage EXCLUDEPAGE
exclude page matching Regular Expression
--excludepagefile EXCLUDEPAGEFILE
exclude pages matching RE in file
--cs, --case-sensitive
use case sensitive RE matching
-v, --verbose print additional information (multiple accepted eg.
-vvv)
-w, --whatif test mode - no action
--imversion IMVERSION
set ImageMagick version command format (default = 6)
--tempdir TEMPDIR use TEMPDIR as temporary file directory
Pattern matching options (-m, -e, --pageexclude) may be used more than once to match against multiple Regular Expressions.
To see examples use "--examples a b" (removing dummy source/destination requirement is a work in progress)
Examples:
Convert all *.CBR files in directory CBR/ to CBZ format and put the output in /tmp/test
cbr2cbz.py CBR/ /tmp/test/
Convert CBR and CBZ files in CBR to CBZ format:
cbr2cbz.py -z CBR/ /tmp/test/
Copy files in CBR/, converting CBR files:
cbr2cbz.py -c CBR/ /tmp/test/
Copy all Cat Conversation files to /tmp/test, without creating subdirectories
cbr2cbz.py --noconvert -f -m "Cat.*Conv" CBR/ /tmp/test
Copy all files to /tmp/test, excluding Thumbs.db
cbr2cbz.py --noconvert -e "Thumbs.db" CBR/ /tmp/test
Convert CBR and CBZ files to low quality format and place in CatConv
cbr2cbz.py -z --shrink CBR/ CatConv/
Convert CBR and CBZ files to extremely low quality format and place in CatConv
cbr2cbz.py -z --shrink --shrinkKB 100 --shrinkQual 10 CBR/ CatConv/