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 Voyage 评测
- 如何修改 Kindle 字体设置中的默认字号大小
- Sherry推荐图书(二十五)—— 了不起的女性主义读物
- [每周一书]《善的脆弱性》善,为什么不能保护我们?
- 只需重启 Kindle 即可解决的一些小故障
- [每周一书]《二十首情诗和一首绝望的歌》
- 从学渣到学霸:我的 100 天阅读简史
- 第二代 Kindle Paperwhite 固件升级到 5.4.5
- 解读哲学家:牛津通识读本系列丛书摘选推荐
- 如何修复用 Calibre 通过 USB 导入 Kindle 的电子书封面
- 唐世平:少沉迷中国历史,多了解世界
- 百度与亚马逊中国合作,成 Kindle 默认搜索
- Kindle 卡索引问题解决方法汇总
- [每周一书]《中年之路》人格的第二次成型
- [每周一书]《金融投资 400 年》群众心理与经验教训
非常好用!感谢书伴!
运行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生成的电子书,也是同样的问题,运行后没有结果。
我也是这样的,你解决了吗?