当前位置:首页 > 群晖 > Calibre > 正文内容

Calibre 使用教程之批量获取电子书元数据

zyhwxm3年前 (2022-02-11)Calibre27

之前书伴写过一些 Calibre 教程,在 Calibre 发布 3.0 里程碑版本时,还专门写了一篇文章梳理了一下 Calibre 的常用功能。这些教程中的功能操作主要是在 Calibre 为我们提供的图形界面上进行的,虽然对于单个任务来说,在界面上进行更易用,但是对于需要批量处理的任务,界面反倒成了障碍。

比如本文将要以某种方法辨别大批量电子书的质量,为提高效率,就没用使用 Calibre 图形界面。

一、如何辨别电子书的质量

相信很多小伙伴都有屯电子书的习惯,很多小伙伴会以 G 计地把电子书文件拉取到自己的硬盘上,虽然都知道这些电子书的质量良莠不齐,但想要对成千上万的电子书文件一个一个查看,显然缺乏效率。那我们该怎么样辨别一本电子书文件质量的好坏呢?从电子书"元数据"上来判断是一个不错的方法。

Kindle 电子书的来源有两种,一种来源于亚马逊官网,另一种是网友自制。虽然亚马逊提供的电子书不能保证百分百完美,但相比自制的电子书质量仍算上乘。Kindle 电子书的格式一般包括 AZW3AZWMOBI 等。其中只有 MOBI 格式,亚马逊官方为其提供了生成工具 KindleGen,但亚马逊官方 Kindle 商店没有直接提供 MOBI 格式的电子书。其它格式如 AZW3 的生成方法均未公开,Calibre 软件之所以能转换的 AZW3 等格式应该也是高手们通过反编译等手段 Hack 到的,和原生的有些微差别。

使用 Calibre 转换过的电子书都会在元数据中留下 Calibre 的标记,很多提供电子书下载的网站也会通过 Calibre 等转换软件往电子书元数据中填充自己的网站宣传信息。虽然你看到的是 AZW3 格式,但已经不是从亚马逊官网获取到的原本的电子书文件了。所以我们可以简单的这样判断:凡是元数据和亚马逊官方提供的原版电子书不匹配的 AZW3AZW 文件,都是经过修改过的非原版电子书文件。

对于亚马逊官方提供的 Kindle 电子书,其元数据内容如下所示:

Title : 白鹿原(茅盾文学奖获奖作品;插图珍藏精装本)

Author(s) : 陈忠实著

Publisher : 人民文学出版社

Languages : zho

Published : 2012-09-30T16:00:00+00:00

Identifiers : mobi-asin:B00OUS31CM

如果经过 Calibre 软件的转换,其元数据内容变成了这样:

Title : 白鹿原(茅盾文学奖获奖作品;插图珍藏精装本)

Author(s) : 陈忠实著

Publisher : 人民文学出版社

Book Producer : calibre (2.80.0) [https://calibre-ebook.com]

Languages : zho

Published : 2012-09-30T16:00:00+00:00

Identifiers : mobi-asin:fa225c79-f5ee-47b8-9fe1-1afb5f6c177f

以上可以看出,第三方软件会在电子书的元数据中插入和修改某些信息,如果转换者修改了标题、作者等信息,就和原版文件完全不同了。虽然对于 AZW3 格式来说,原版文件和通过 Calibre 转换的文件在内容排版上差别不算太大,但可能会影响到诸如生词提示、X-Ray 等依赖于 ASIN 编号的相关功能的使用。我们通过元数据就可以概略识别出,哪些电子书是没问题的,哪些电子书是有待检查的。

二、如何获取电子书的元数据

那我们该怎样获取电子书元数据呢?如果有大量的文件,又该怎样批量获取电子书元数据呢?在 Calibre 的图形界面中,我们可以通过菜单查看或编辑电子书的元数据,查看单本电子书的元数据还成,若想要批量获取就难以达成了。其实 Calibre 除了我们惯常使用的图形界面,还提供了一些命令行工具Command Line Interface,简称 CLI)。图形界面上某些功能其实也是通过调用这些工具完成任务的。比如读取电子书的元数据,就是调用的本文要使用的一个命令行工具"ebook-meta" 完成的。

1、准备 ebook-meta 工具

如果你的电脑是 Windows 系统,一般在安装好 Calibre 之后 ebook-meta 命令就应该是可用的了。不放心可以打开"命令提示符"直接输入 ebook-meta 命令,如果出现命令的帮助信息,就确定是可用的。

* 提示:如果运行命令后提示找不到命令,需要你自行配置一下,右键单击"计算机",在弹出的菜单中点击"属性 -> 高级系统设置 -> 环境变量",在弹出的窗口中的"系统变量"中,双击"Path"项目,把 Calibre 的安装路径添加进去即可。

如果你的电脑是 macOS 系统,安装 Calibre 之后需要手动把命令行工具的路径添加到系统变量中。打开"终端",把下面的命令粘贴进去,回车就可以使用 ebook-meta 命令了。

echo -e '\nexport PATH="$PATH:/Applications/calibre.app/Contents/MacOS"' >> ~/.bash_profile && source ~/.bash_profile

Calibre  ebook-meta 命令的所有使用方法可以直接运行 ebook-meta 查看帮助信息。此命令可以向电子书写入元数据,也可以读取电子书元数据。这里只使用它的读取功能。

2、获取单个电子书的元数据

读取单个电子书元数据的方法很简单,只需要打开"命令提示符""终端",输入 ebook-meta 命令,空格后加上电子书路径,即可获取该电子书元数据,如之前我们所展示的那样。

Windows 系统"命令提示符"

ebook-meta C:\Users\bookfere\Desktop\电子书名.azw3

macOS 系统"终端"

ebook-meta /users/bookfere/desktop/电子书名.azw3

* 如果电子书文件就在当前目录,则可以省去绝对路径,只录入电子书文件名即可。

3、批量获取电子书的元数据

当然我们的目的是批量获取电子书的元数据列表,像上面那样单个读取就显得太没效率了。所以书伴为小伙伴们准备好了可以批量记录电子书元数据的脚本,可以把某个目录下所有电子书的元数据写入一个文本文档中。以下两个脚本分别适用于 Windows macOS 系统,可根据自己的系统类型选用。

◆ Windows 系统批处理脚本

打开记事本,把下面的内容全部复制粘贴进去,存为 eBookMeta.bat 文件,注意编码要选择 ANSI。使用时只需要双击此文件,根据提示输入 Kindle 电子书文件所在目录的绝对路径,按回车,脚本会逐一读取电子书的元数据,并写入到 eBookMeta.txt 文件中(存放在电子书文件所在目录)。

::Author : bookfere.com

::Site : https://bookfere.com/post/550.html

 

@echo off & color 0A

::定义变量

set IDEN="书伴 - 为静心阅读而生(bookfere.com"

set LINE="===================================="

set SPIL="------------------------------------"

echo %IDEN:"=%

echo.

where ebook-meta 2>nul >nul

if %errorlevel% neq 0 (

echo 脚本不可用!请先安装 Calibre 软件:https://bookfere.com/tools#calibre

echo.

echo 请按任意键退出。

pause > nul

exit

)

:RETRY

set /p DIR=请输入电子书文件所在的绝对路径:

if not exist %DIR% (

echo.

echo 请输入有效的路径!

echo.

goto RETRY

)

set LOG="%DIR%/eBookMeta.txt"

::开始处理

echo.

echo 开始读取电子书元数据……

echo 目录 %DIR% 下的电子书元数据列表 > %LOG%

echo.

echo %LINE:"=% >> %LOG%

for /R %DIR% %%i in (*.azw *.mobi *.epub) do (

echo 电子书 %%i 的元数据: >> %LOG%

echo %SPIL:"=% >> %LOG%

ebook-meta "%%i" | find /v "" >> %LOG%

echo %LINE:"=% >> %LOG%

echo - 已处理 %%i

)

chcp 936 > nul

echo %IDEN:"=% >> %LOG%

echo.

echo全部处理完毕!

echo.

::处理结束

echo 请按任意键结束此次处理并打开结果。

pause > nul

notepad %LOG%

exit

* 提示:在 Windows 的批处理中 .azw 可以匹配 .azw3.azw4 等后缀名。

◆ macOS 系统 Shell 脚本

使用代码编辑器(如 Sublime Text 3),把下面的代码复制粘贴并另存为 eBookMeta.sh,然后打开"终端",运行命令 chmod +x eBookMeta.sh 让此脚本文件可执行。这样就可以用命令 ./eBookMeta.sh 运行此脚本了。根据提示输入电子书文件所在目录的绝对路径(也可以直接在命令后面加路径),脚本会逐一读取电子书元数据,写入到 eBookMeta.txt 文件中(存放在电子书文件所在目录)。

#!/bin/bash

 

# Author : bookfere.com

# Site : https://bookfere.com/post/550.html

 

# 定义变量

IDEN="书伴 - 为静心阅读而生(bookfere.com"

LINE="===================================="

SPLI="------------------------------------"

if ! type -t ebook-meta > /dev/null; then

echo "脚本不可用!请先安装 Calibre 软件:https://bookfere.com/tools#calibre"

exit

fi

printf "\n$IDEN\n"

if [ ! $1 ]

then

printf '\n输入电子书文件所在的绝对路径:'

echo -n

read DIR

else

DIR="$1"

fi

if [[ ! -d "$DIR" ]]

then

printf "\n请输入有效的路径!\n"

bash $0

fi

LOG="$DIR/eBookMeta.txt"

# 开始处理

echo $LINE > $LOG

cd "$DIR"

echo "目录 $DIR 下的电子书元数据列表" > $LOG

printf "\n开始读取电子书元数据……\n"

echo "$LINE" >> $LOG

OIFS="$IFS"

IFS=$'\n'

for SUB in $(find "$DIR" -maxdepth 5 -type d)

do

if [[ -d "$SUB" ]]

then

cd "$SUB"

for f in $SUB/*.azw3 $SUB/*.mobi $SUB/*.azw $SUB/*.epub

do

if [[ -f "$f" ]]

then

echo "$f" >> $LOG

echo "$SPLI" >> $LOG

ebook-meta "$f" >> $LOG

echo $LINE >> $LOG

printf "\n- 已处理 $f"

fi

done

fi

done

echo $IDEN >> $LOG

printf "\n\n√ 全部处理完毕!\n\n"

# 处理结束

read -n 1 -s -r -p "请按任意键结束此次处理并打开结果。"

open $LOG

脚本运行完毕后,你就可以得到指定目录的所有电子书元数据列表了,就像下面这样:

目录 /users/bookfere/desktop/test 下的电子书元数据列表

====================================

/users/bookfere/desktop/test/哲学的慰藉.azw3

------------------------------------

Title : 哲学的慰藉 (阿兰·德波顿文集)

Author(s) : 阿兰·德波顿(Alain de Botton)

Languages : zho

Published : 2009-03-31T16:00:00+00:00

Identifiers : mobi-asin:B00JM2HNVG

====================================

/users/bookfere/desktop/test/白鹿原.azw3

------------------------------------

Title : 白鹿原(茅盾文学奖获奖作品;插图珍藏精装本)

Author(s) : 陈忠实著

Publisher : 人民文学出版社

Languages : zho

Published : 2012-09-30T16:00:00+00:00

Identifiers : mobi-asin:B00OUS31CM

====================================

/users/bookfere/desktop/test/出梁庄记.azw3

------------------------------------

Title : 出梁庄记

Author(s) : 梁鸿

Publisher : 花城出版社

Languages : zho

Published : 2013-02-28T16:00:00+00:00

Identifiers : mobi-asin:B00K68TX22

====================================

/users/bookfere/desktop/test/童年的消逝.azw3

------------------------------------

Title : 童年的消逝

Author(s) : 尼尔·波兹曼

Publisher : 中信出版社

Languages : zho

Published : 2014-05-11T16:00:00+00:00

Identifiers : isbn:9787508648279, mobi-asin:B06XGWRP6N

====================================

/users/bookfere/desktop/test/明智行动的艺术.azw3

------------------------------------

Title : 明智行动的艺术(《清醒思考的艺术》姊妹篇 精编图文版)

Author(s) : Rolf Dobelli, PhD,〔德〕罗尔夫多贝里

Languages : zho

Published : 2013-08-25T16:00:00+00:00

Identifiers : isbn:9787508641287, mobi-asin:B00GFFKJIC

====================================

书伴 - 为静心阅读而生(bookfere.com

根据这个列表,就可以通览每个电子书的元数据信息,作为你挑拣电子书的依据。

以上,就是利用了 Calibre  ebook-meta 这一个命令行工具,配以批处理文件达成批量获取电子书元数据列表的目的。当然玩儿法不止于此,比如我们还可以把一大批电子书自动归类,把原版 Kindle 电子书筛选出来,但是限于篇幅这里就不展开了。除了 ebook-meta 这个命令行工具外,Calibre 还有其他很多实用的命令行工具,能够让我们更方便的管理和处理电子书,今后书伴还会进行介绍。


版权声明:本文版权归原作者所有,仅供技术参考;

                 若有违反您个人权益,请留言反馈删除相关信息;


本文链接:http://zyh-c.myds.me:8086/post/43.html

相关文章

Calibre使用教程之为电子书添加或修改封面

Calibre使用教程之为电子书添加或修改封面

如果你是在亚马逊 Kindle 商店购买的电子书,一般都会带有比较美观的封面,但若是从网上下载的 epub 或 mobi 等格式的电子书就不会那么省心了,因为电子书的制作渠道的不同,导致质量的参差不齐,有些电子书的封面很粗糙,有的干脆没有封...

Calibre 使用教程之抓取 RSS 制成电子书

Calibre 使用教程之抓取 RSS 制成电子书

之前 Kindle 伴侣曾经写过一篇文章——在 Google App Engine 上用 KindleEar 搭建 RSS 推送服务器,架设成功后可以添加你所喜欢的 RSS 订阅源,KindleEar 就可以自动抓取最新文章,并以期刊的形式...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。