KindleStrip:大幅精简压缩 mobi 文件体积
kindlestrip 是一款精简 mobi 格式电子书的小脚本。使用 KindleGen 或 Kindle Comic Creator、Kindle Previewer 之类的官方电子书转换软件转换的 mobi 格式电子书,使用 KindleUnpack 拆解后可以看到一个压缩文件 kindlegensrc.zip,这就是 mobi 文件内含的源文件存档。
该文档是转换前的源文件的打包存档,仅供调试之用,大小和转换前的 epub 文件相同,几乎占 mobi 文件大小的一多半。如果是个人使用,而不是上传发布到 KDP(Kindle出版服务)包含一份源文件是没有必要的,kindlestrip 的作用就是将 kindlegen 生成的 mobi 中这部分删除以求更小的文件体积,精简后的文件仅仅是去除掉了对于个人用户来说冗余的源文件,对电子书的阅读没有丝毫影响。
一、脚本下载
KindleStrip 是用 Python 语言写成的,所以必须得有 Python 环境的支持。如果你使用的是 Windows 系统且没有安装 Python 的话,请先去 Python 官网下载并安装 Python,再下载本脚本使用。如果您使用的是 macOS 系统,因为系统自带 Python 就不用另外安装了,可直接下载脚本使用。
脚本下载:kindlestrip_v136.py.zip | 脚本发布页下载
另外,如果你使用的系统是 macOS 或 Linux,也可以运行“终端”运行下面的命令直接安装。
pip install kindlestrip
如果你使用的系统为 Windows 也可以下载下面这个批处理脚本批量精简 mobi 文件。
批处理脚本下载:kindlestrip_v136_batch.zip
使用方法为,将需要处理的电子书文件放入 temp 文件夹,双击运行 batch.bat 脚本后,处理完成的电子书会自动放入 result 文件夹中。
二、脚本使用
脚本的使用很简单。为了方便说明,下面步骤中的 kindlestrip 和 mobi 文件都是放在同一目录下。
1、Windows 系统
如果你使用的是 Windows 系统,先运行“命令提示符”,先用 cd
命令切换到 kindlestrip 脚本和 mobi 文件所在的目录,然后运行下面的命令。请注意,在这一行命令中,kindlestrip_v136.py 就是下载到的脚本名称;infile.mobi 是精简前的文件名,如果文件名含有空格,请使用单引号或双引号包裹住;outfile.mobi 是精简后的文件名,名字随便起,如果文件名包含空格同样要使用引号。
kindlestrip_v136.py infile.mobi outfile.mobi
如果想要批量精简 mobi 格式电子书文件,请先把下载到的 kindlestrip_v136_batch.zip 文件解压缩,可以看到 temp 和 result 两个文件夹,可以把需要处理的 mobi 格式电子书放到 temp 文件中,然后运行 batch.bat 批处理文件,精简后的 mobi 文件将会存放在 result 文件夹中。
2、Mac OS X 系统
如果你用的是 Mac 系统,并且使用的是下载的脚本,可先运行“终端”,使用 cd
命令切换到 kindlestrip 脚本和 mobi 文件所在的目录,然后运行下面的命令即可。如果文件名包含空格要使用引号
python kindlestrip_v136.py infile.mobi outfile.mobi
如果是使用 pip
命令安装的,则更简单,切换到 mobi 文件所在的目录,直接运行下面的命令即可。
kindlestrip infile.mobi outfile.mobi
三、脚本提示
如果 mobi 文件含有冗余文件,则会出现类似下面的提示:
SRCS section number is: 43
SRCS section count is: 1
SRCS length is: 0x10cfa
done
如果 mobi 文件不含有冗余的源文件,则会显示如下提示:
Error: File doesn't contain the sources section.
四、常见问题
如果出现类似下面这样的提示,可能是电子书自身有问题:
SRCS section number is: 2921
SRCS section count is: 4
SRCS length is: 0x1d22a9c
Error: SRCS section num does not point to SRCS.
这里提供两种解决方法:
一种是先使用 KindleUnpack 将电子书拆解为源文件,再用如下所示的带有不附加源码选项的 KindleGen 命令将源文件重新转换成 mobi 格式电子书文件。
indlegen content.opf -dont_append_source
另一种是修改 KindeStrip 源码让其忽略该错误。将脚本文件 kindlestipt.py 中的如下两行代码注释掉:
if self.datain[self.srcs_offset:self.srcs_offset+4] != 'SRCS':
raise StripException("SRCS section num does not point to SRCS.")
这种方法通过对有限的几本电子书时未发现异常。但是,如果对于你来说出问题的电子书是个例,建议不要使用这种方法,因为不知道去掉脚本中的这个条件会不会影响对确实有问题电子书的辨别。
五、其他
在使用 KindleGen 生成自制电子书时,可以通过添加一个参数 -dont_append_source
来禁止往生成的 mobi 文件中附加源文件。这样生成的 mobi 文件就不再需要 kindlestrip 来辅助删除冗余源文件了。
具体命令如下所示(如果你还不会使用 KindleGen 请点击这里查看具体操作步骤):
kindlegen -dont_append_source xxx.opf
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/240.html
延伸阅读
- 多图详细!白色版亚马逊 Kindle 电子阅读器评测
- 亚马逊对 Kindle 电子书样章做了性能改进
- [图解] 如何轻松拆卸嵌入式 Kindle 保护套
- Kindle Scribe 新增三项功能:新画笔、子文件夹和笔记导航
- [每周一书]《童年的消逝》“小大人”现象的由来
- [每周一书] 一个评估、改善和保持《自尊》的计划
- [已结束] 正版福利!亚马逊免费送 88 元电子书优惠券
- [每周一书]《煤气灯效应》人际关系中的情感操纵
- Kindle 原生系统和多看系统的区别和比较
- [2019.04.10] Kindle X 咪咕版固件升级至 5.7.2.6
- 公告:亚马逊联盟专员致 Kindle 伴侣的一封信
- [视频] Kindle Paperwhite 4(KPW4)拆机分解
- 亚马逊还我 Kindle Oasis ,你那闪耀的 Colorsoft 没它好用
- 亚马逊正式发布全新 Kindle Paperwhite 5(KPW5)
- Clippings:Kindle“我的剪贴”管理神器
非常好用!感谢书伴!
运行batch.bat闪退是什么原因呢
你好,我使用的Kindlestrip无论是代码版,批量版还是执行程序都不行。
错误代码:执行程序:Error:File doesn’t contain the sources section.
批量版:一闪而过,疑似与代码版相同
代码版:C:\Users\Henry\Desktop\kindlestrip-1.36.1>kindlestrip.py 1.mobi 2.mobi
File “C:\Users\Henry\Desktop\kindlestrip-1.36.1\kindlestrip.py”, line 70
print “Warning: pathof expects utf-8 encoded byestring: “, s
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(“Warning
: pathof expects utf-8 encoded byestring: “, s)? 能不能帮帮忙?
错误提示“File doesn’t contain the sources section.”,说明你要处理的电子书不包含源文件,所以不需要处理。
错误提示“SyntaxError: Missing parentheses in call to ‘print’.”,说明你在用 Python 3 执行 Python 2 的代码,你可以下载一个 Python 2.7 来执行,或者把代码中的所有
print
语句都加上括号,如print 'xxx'
改成 print('xxx')
。好的,谢谢!
打包成一键执行程序了,无需安装python,有需要的小伙伴自行下载~
https://lansous.lanzouo.com/icoRNxb1csf
链接:https://pan.baidu.com/s/1-pw63il0oc8p6C3k4ZTPyQ
提取码:9999
为什么显示 ‘kindlestrip.exe’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。 啊?
我是小白就先 用cd定位了一下 然后按要求输入 然后就不管用, 楼主原版的也是这个样子
如果你使用的是层主提供的程序,不需要手动打开命令提示符,只需要把要精简的电子书文件拷贝到“_input”文件夹,然后双击“开始精简.bat”那个文件就可以了,精简后的文件会自动放入“_output”文件夹中。
大佬666 谢谢! 很方便好用。
你好,我用 KindleUnpack 拆解了以后发现有一个kindlegensrc.zip的文件,但是使用脚本又不能输出新文件,运行完命令提示:
SRCS section number is: 2921
SRCS section count is: 4
SRCS length is: 0x1d22a9c
Error: SRCS section num does not point to SRCS.
这可能是电子书自身的问题。对于标准的带有源文件的电子书文件,会包含一个名为 SRCS 的记录,如果 KindeStrip 没有检测到这个记录,就会出现你所看到的错误提示。
解决方法有两种:
一种是通过 KindleUnpack 把电子书拆解为源文件,再用带有不附加源码选项的 KindleGen 命令将源文件重新转换成 MOBI 格式:
另一种是修改 KindeStrip 的源码,让其忽略该错误,即将脚本文件 kindlestipt.py 的下面这两行注释掉:
这种方法通过测试你发过来的电子书未发现异常。但是,如果出问题的电子书是个例,建议不要使用这种方法,因为不知道去掉脚本中的这个条件会不会影响对确实有问题电子书的辨别。
谢谢指点!
你好,我运行了kindlestrip之后,提示以下信息:
SRCS section number is: 11131
SRCS section count is: 1
SRCS length is: 0xe58
Error: SRCS section num does not point to SRCS.
这是为什么?我是想把一本电子书精简以下体积,是不可以吗?还是其他什么原因呢?
此问题可参考这条回复。
请问这脚本是不是针对chainlp制作的mobi的?
我用kindle comic conventer将epub转换成mobi,然后用这个脚本并不能压缩文件大小。
盼复!
Kindle Comic Conventer 和 ChainLP 这两个漫画转换软件都考虑到了剔除源文件的问题,所以不需要进行额外操作。
你好,我用kcc制作的epub只有200多m,用kindle preview转换成的mobi足足有500多m,应该是有冗杂部分吧?
批处理有个小问题,书名里有空格就处理不了。加上引号应该就搞定了
..\kindlestrip_v136.py “%%i” “..\result\%%i”
为什么运行bat文件
会出现闪退现象呀。Result里面也没有文件。
同
SRCS section number is: 777
SRCS section count is: 1
SRCS length is: 0x894
Error: SRCS section num does not point to SRCS.
请问出现这个是什么意思?result文件夹也没有东西。是不需要处理吗?
需要用chainlp制作的漫画才能使用KindleStrip.py精简,我用Kindle Comic Converter制作的漫画试过也是会提示这个
用chainlp做了一本漫画,结束时提示kindlestrip.py错误,结果mobi有900M大小,用batch.bat处理显示memory error.
发现无论是用chainlp,还是kcc制作漫画时,只要文件过大,就会出现strip这个脚本不可用的情况,然后自己用strip这个脚本也会显示错误。文件名和路径都符合要求。
我安装的是python2.7.3
漫画通常无法再压缩的哦 就好象你一堆图片 无论使用zip还是rar 文件尺寸并不会有太大差别.
1. 安装Kindle Comic Creator ,安装目录下的KC2文件夹内有一个striptool.exe文件。使用Kindle Comic Creator 制作的约340M的漫画测试,将其拖到striptool.exe上,用striptool.exe打开,即可获得含有嵌入的源文件和一个文件名相同的170M左右的mobi文件。
2. 尝试上述功能时,电脑上下载了kindlestrip_v136.py,但是安装的时Python 3,不确定直接使用striptool的时候,Python是否是必要的。
3. 使用Kindle Comic Convertor制作的40M左右的漫画测试,拖放到striptool.exe上面,没有生成相应的文件夹,可能 Converter制作的漫画中不含源文件
非常有用!!原来kc2官方给出了strip软件啊/(ㄒoㄒ)/~~我用kindlestrip总是出问题,非常感谢!
你好,你给的py脚本只适用于py2。
这里https://github.com/jefftriplett/kindlestrip/issues/2 ,有大佬提供了支持python3的kindlestrip_py3.py,到这里https://github.com/jefftriplett/kindlestrip/blob/3f954d6f0a291346f39184c6e7d20e24f689e4de/kindlestrip_py3.py,复制所有源代码,保存为*.py即可
单独strip,提示:
print “Warning: pathof expects utf-8 encoded byestring: “, s
SyntaxError: Missing parentheses in call to ‘print’
又是什么意思?
安装py2,或者自己改脚本
下载并安装了 Python,运行 batch.bat 批处理文件结果result 文件夹中什么都没有,反复几次在c盘、桌面都没用。求解!
上课的放假 您好。这会不会是您所处理的电子书无需处理?因为只有 KindleGen 生成的电子书才会在电子书中嵌入源文件,而其他诸如 Calibre 转换过的电子书则无需处理。
使用kindle Previewer转换的
你好,我就是用kindleGen生成的电子书,也是同样的问题,运行后没有结果。
我也是这样的,你解决了吗?