整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

ffmpeg命令行工具

于ffmpeg命令行的使用 之前一直都是通过百度(惭愧),一边找 一边用 感觉写起来比较麻烦 就在这记录下 方便以后温习

我们都知道从官网下来的可以直接运行的程序有三个 一个是ffmpeg.exe ffplay.exe ffprobe.exe

关于ffmpeg的官网里边 一般是提供三种(static shared dev)

第一个static是提供了之前说的那三个程序 并且人家把各个dll集成了进去 导致程序的大小比较大

第二个shared 也提供了那三个程序 只不过大小就小得多 因为它还提供了各种dll

第三个就完全适用于开发人员 提供了lib以及头文件

这边我们就直接来说说提供的那三个程序怎么用(直接点是没用的哈 直接在命令行里边用就好)

ffmpeg是用来转码的工具 ffplay是用来播放的 ffprobe是用来查看文件格式的

**************************************************************************************************************************************

首先我们来看下ffmpeg

http://ffmpeg.org/ffmpeg.html 官方说明

我自己输入 ffmpeg -h

首先会显示ffmpeg的版本 以及编译这个用的GCC的版本 以及编译之前configure的选项 之后就是依赖各种库的版本

基本的信息显示完了以后 就会告诉你怎么使用

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

当然我们也可以活用help信息

Getting help:

-h -- print basic options 会打印基本的选项

-h long -- print more options 会打印更多的选项

-h full -- print all options (including all format and codec specific options, very long) 打印所有的选项(包括所有格式和编解码器特定选项,很长)

-h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter 可以打印指定的选项

See man ffmpeg for detailed description of the options. 当然了你要想看得仔细 有关选项的详细描述,请参阅man ffmpeg。

下面我们就来看看各个选项(之后再来一个个试)

Print help / information / capabilities:

-L show license

-h topic show help

-? topic show help

-help topic show help

--help topic show help

-version show version

-buildconf show build configuration

-formats show available formats 显示所支持的格式

-muxers show available muxers 显示所有可用的封装格式

-demuxers show available demuxers 显示所有可用的解封装格式

-devices show available devices 显示支持的设备(这里显示的只是很大的范围 并不会显示具体的设备 比如我输入ffmpeg -devices 只会像是下面输出的那样)

Devices:

D. = Demuxing supported 可以理解为输入设备(我们可以这么理解 解封装是获取流 这个设备其实干的也是获取流的事)

.E = Muxing supported 可以理解为输出设备(同理 输出设备是使用流的 和封装类似)

--

E caca caca (color ASCII art) output device

D dshow DirectShow capture

D lavfi Libavfilter virtual input device

E sdl,sdl2 SDL2 output device

D vfwcap VfW video capture

-codecs show available codecs 显示支持的编解码器(看清楚 是编解码器)

需要注意的就是前面的那些什么 D,E,V,A,S,I,L,S的一类的意思

D..... = Decoding supported 解码

.E.... = Encoding supported 编码

..V... = Video codec 视频

..A... = Audio codec 音频

..S... = Subtitle codec 字幕

...I.. = Intra frame-only codec 帧内编解码器

....L. = Lossy compression 有损

.....S = Lossless compression 无损

-decoders show available decoders 显示支持的解码器

-encoders show available encoders 显示支持的编码器

-bsfs show available bit stream filters 显示可用的比特流过滤器

-protocols show available protocols 显示支持的协议

-filters show available filters 显示可用的过滤器(需要注意下下面的几个的意思 现在我还是没有搞懂什么意思 要去找找代码看看了)

Filters:

T.. = Timeline support

.S. = Slice threading

..C = Command support

A = Audio input/output

V = Video input/output

N = Dynamic number and/or type of input/output

| = Source or sink filter

-pix_fmts show available pixel formats 显示可用像素格式

Pixel formats:

I.... = Supported Input format for conversion 支持转换的输入格式

.O... = Supported Output format for conversion 支持的转换输出格式

..H.. = Hardware accelerated format 硬件加速格式

...P. = Paletted format 调色格式

....B = Bitstream format 位流格式

下面这个是输出的格式

FLAGS NAME (标志名称)NB_COMPONENTS (组成数量 yuv420 就是有三个组成的) BITS_PER_PIXEL(每个像素占得位数)

-layouts show standard channel layouts 显示标准通道布局

-sample_fmts show available audio sample formats 显示可用的音频示例格式

-colors show available color names 显示可用颜色名称

-sources device list sources of the input device 列出输入设备的源(这个 还不清楚怎么用 到时看看官方文档)

-sinks device list sinks of the output device 列出输出设备的接收器

-hwaccels show available HW acceleration methods 显示可用的硬件加速方法

Global options (affect whole program instead of just one file: 全局选项-----影响整个程序,而不仅仅是一个文件:

-loglevel loglevel set logging level 设定log等级 "quiet" "panic" "fatal" "error" "warning" "info" "verbose" "debug" "trace"

补充说明: Flags can also be used alone by adding a ’+’/’-’ prefix to set/reset a single flag without affecting other flags or changing loglevel. When setting both flags and loglevel, a ’+’ separator is expected between the last flags value and before loglevel.

意思就是----还可以单独使用标志,添加‘+’/‘-’前缀来设置/重置单个标志,而不影响其他标志或更改日志级别。当同时设置标志和日志级别时,需要在最后一个标志值之间和日志级别之前使用。

eg:ffmpeg -loglevel repeat+level+verbose -i input output

-v loglevel set logging level 和上面一样的

-report generate a report 生成报表

-max_alloc bytes set maximum size of a single allocated block 设置单个分配块的最大大小

-y overwrite output files 覆盖输出文件

-n never overwrite output files 永远不要覆盖输出文件

-ignore_unknown Ignore unknown stream types 忽略未知流类型

-filter_threads number of non-complex filter threads 非复杂过滤线程数 (后边要加数字)

-filter_complex_threads number of threads for -filter_complex 过滤器复合体的线程数 (后边要加数字)

-stats print progress report during encoding 在编码期间打印进度报告

-max_error_rate ratio of errors (0.0: no errors, 1.0: 100% error maximum error rate 错误率(0:无错误,1:100%错误最大错误率)

-bits_per_raw_sample number set the number of bits per raw sample 设置每个原始样本的位数

-vol volume change audio volume (256=normal) 改变音频音量(256=正常)

Per-file main options: 每个文件的主要选项

-f fmt force format 强迫使用格式‘fmt’

-c codec codec name

-codec codec codec name

-pre preset preset name 预先设定名称

-map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile 依据输入文件设置输出文件的元数据信息

-t duration record or transcode "duration" seconds of audio/video 编码或转码音频/视频的“ duration”秒

-to time_stop record or transcode stop time 记录或转码停止时间

-fs limit_size set the limit file size in bytes 设置限制文件大小(以字节为单位)

-ss time_off set the start time offset 设置起始时间偏移量

-sseof time_off set the start time offset relative to EOF 设置相对于eof的起始时间偏移量。

-seek_timestamp enable/disable seeking by timestamp with -ss 使用-ss启用/禁用时间戳查找

-timestamp time set the recording timestamp ('now' to set the current time) 设置录制时间戳(“立即”设置当前时间)

-metadata string=string add metadata 添加元数据

-program title=string:st=number... add program with specified streams 添加具有指定流的程序

-target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") 指定目标文件类型( "vcd", "svcd", "dvd", "dv" or "dv50",可选前缀为 "pal-", "ntsc-" or "film-")

-apad audio pad 音频垫

-frames number set the number of frames to output 将帧数设置为输出

-filter filter_graph set stream filtergraph 设置流滤波器

-filter_script filename read stream filtergraph description from a file 从文件中读取流过滤图描述

-reinit_filter reinit filtergraph on input parameter changes 输入参数变化的 reinit滤波图

-discard discard 丢弃

-disposition disposition 配置

Video options: 视频选项

-vframes number set the number of video frames to output 设置输出视频的帧数

-r rate set frame rate (Hz value, fraction or abbreviation) 设置帧速率(Hz值、分数或缩写)

-s size set frame size (WxH or abbreviation) 设置帧大小(WXH或缩写——Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576)

-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) 设定高宽比(4:3,16:9或1.3333,1.7777)

-bits_per_raw_sample number set the number of bits per raw sample 设置每个原始样本的位数。

-vn disable video 禁用视频

-vcodec codec force video codec ('copy' to copy stream) 强制视频编解码器(“复制流)

-timecode hh:mm:ss[:;.]ff set initial TimeCode value. 设置初始时间码值

-pass n select the pass number (1 to 3) 选择通行证号码(1到3)

-vf filter_graph set video filters 设置视频滤波器

-ab bitrate audio bitrate (please use -b:a) 音频比特率(请使用-b:a)

-b bitrate video bitrate (please use -b:v) 视频比特率(请使用-b:v)

-dn disable data 禁用数据

Audio options: 音频选项

-aframes number set the number of audio frames to output 设置输出音频流的帧数

-aq quality set audio quality (codec-specific) 设置音频质量(特定编解码器)

-ar rate set audio sampling rate (in Hz) 设置音频采样率(以赫兹为单位)

-ac channels set number of audio channels 设置音频通道数

-an disable audio 禁用音频

-acodec codec force audio codec ('copy' to copy stream) 强制音频编解码器(“复制流)

-vol volume change audio volume (256=normal) 改变音频音量(256=正常)

-af filter_graph set audio filters 设置音频过滤器

Subtitle options: 字幕选项

-s size set frame size (WxH or abbreviation) 设置帧大小(WxH或省略)

-sn disable subtitle 禁用字幕

-scodec codec force subtitle codec ('copy' to copy stream) 强制字幕编解码器(“复制流)

-stag fourcc/tag force subtitle tag/fourcc 强制字幕标签/fourcc码

-fix_sub_duration fix subtitles duration 修正字幕持续时间

-canvas_size size set canvas size (WxH or abbreviation) 设置画布大小(WXH或缩写)

-spre preset set the subtitle options to the indicated preset 将字幕选项设置为指定的预置

好了 我们就开始用实例进行巩固

ffmpeg -i cyq.avi out.avi

这个是最简单的转码命令 转码的内部参数都是取的默认值

我们来看下相关的参数

后来才意识到之前为什么会写错 现在 我们再来重温一遍ffmpeg的书写格式

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg + 全局的选项(可省略)+{输入文件选项 -i 文件} +{输出文件选项 文件}

**************************************************************************************************************************************

ffplay 是用SDL来写的一个播放器

(官方的解释:ffplay是一个非常简单和可移植的媒体播放器,使用ffmpeg库和SDL库。它主要用作各种ffmpeg API的测试床。)

他的功能可谓是很强大 但是就是没有图形化的操作界面 只能通过键盘来操作

这边就分 快捷键以及选项来进行说明

http://ffmpeg.org/ffplay.html 官网的使用说明

我们先来看下ffplay -h

因为显示的东西太多 我这边就来挑选着记录

前边显示的和ffmpeg的差不多

我们先看下他的用法:ffplay [options] input_file

接下来看下主选项:

Main options:

-L show license

-h topic show help

-? topic show help

-help topic show help

--help topic show help

-version show version

-buildconf show build configuration

-formats show available formats

-muxers show available muxers

-demuxers show available demuxers

-devices show available devices

-codecs show available codecs

-decoders show available decoders

-encoders show available encoders

-bsfs show available bit stream filters

-protocols show available protocols

-filters show available filters

-pix_fmts show available pixel formats

-layouts show standard channel layouts

-sample_fmts show available audio sample formats

-colors show available color names

-loglevel loglevel set logging level

-v loglevel set logging level

-report generate a report

-max_alloc bytes set maximum size of a single allocated block

-sources device list sources of the input device 显示输入设备的自动检测源。

-sinks device list sinks of the output device 显示输出设备的自动检测接收器。

-x width force displayed width

-y height force displayed height

-s size set frame size (WxH or abbreviation)

-fs force full screen 强制全屏(和ffmpeg中的fs是不一样的用法)

-an disable audio

-vn disable video

-sn disable subtitling

-ss pos seek to a given position in seconds 以秒为单位寻找给定位置

-t duration play "duration" seconds of audio/video 播放音频/视频的“ duration”秒

-bytes val seek by bytes 0=off 1=on -1=auto 按字节查找 0=OFF 1=ON -1=AUTO

-nodisp disable graphical display 禁用图形显示

-noborder borderless window 无边界窗口

-volume volume set startup volume 0=min 100=max 设置启动 volume0=min 100=max

-f fmt force format

-window_title window title set window title 窗口标题集窗口标题

-af filter_graph set audio filters 设置音频过滤器

-showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT) 选择显示模式(0=视频,1=波形,2=RDFT)

-i input_file read specified file 读取指定文件

别说明:该专栏文章均来源自微信公众号【大数据实战演练】,欢迎关注!

版本说明:

通过 HDP 3.0.1 安装的 HBase 2.0.0

一、概述

HBase 本身提供了很多种数据导入的方式,目前常用的有三种常用方式:

  • 使用 HBase 原生 Client API
  • 使用 HBase 提供的 TableOutputFormat,原理是通过一个 Mapreduce 作业将数据导入 HBase
  • 使用 Bulk Load 方式:原理是使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后直接将生成的 HFile 加载到正在运行的 HBase 中。

二、方式对比

前两种方式:需要频繁的与数据所存储的 RegionServer 通信,一次性导入大量数据时,可能占用大量 Regionserver 资源,影响存储在该 Regionserver 上其他表的查询。

第三种方式:了解过 HBase 底层原理的应该都知道,HBase 在 HDFS 中是以 HFile 文件结构存储的,一个比较高效便捷的方法就是先生成 HFile,再将生成的 HFile 加载到正在运行的 HBase 中。即使用 HBase 提供的 HFileOutputFormat2 类或者 importtsv 工具来完成上述操作。

经过对比得知:如果数据量很大的情况下,使用第三种方式(Bulk Load)更好。占用更少的 CPU 和网络资源就实现了大数据量的导入。本篇文章也将主要介绍 Bulk Load 方式。

三、Bulk Load 说明

Bulk Load 方式之所以高效,是因为绕过了正常写数据的路径(WAL、MemStore、flush)。总的来说,Bulk Load 方式使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后直接将生成的 HFiles 加载到正在运行的 HBase 中。与仅使用 HBase API 相比,使用 Bulk Load 方式不占用 Region 资源,不会产生巨量的写入 I/O,将使用更少的 CPU 和网络资源。

HBase Bulk Load 过程包括两个主要步骤:

  • 将 准备的数据 生成 HFile :使用 importtsv 工具将数据转化为 HFile ,或者通过 HBase 提供的 HFileOutputFormat2 类编写 MapReduce 程序。
  • 将 HFile 导入到 HBase 中:使用 LoadIncrementalHFiles 或者 completebulkload 将 HFile 导入到 HBase中。

流程如下图所示:

3.1 将准备的数据生成HFile

将数据生成 HFile,有两种方式,分别是:

  • 通过 HBase 提供的 HFileOutputFormat2 类编写 MapReduce 程序来生成 HFile 。(本篇文章不扩展)
  • 使用 importtsv 工具将 TSV 格式数据转换为 HFile ,自动生成 MapReduce 任务。

本篇文章主要还是讲解下 importtsv 工具的使用,编写 MapReduce 程序在本篇不扩展,后续文章会有补充。

importtsv 是一个实用工具,它将 TSV 格式的数据加载到 HBase 中。它有两种用法,分别为:

  • importtsv 工具默认使用 HBase put API 导入数据,将数据从 HDFS 中的 TSV 格式直接加载到 HBase 的 MemStore 中。非 Bulk Load 方式,比较占用集群资源,不建议在处理大数据量时使用。
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>
  • Bulk Load 方式,当使用选项 -Dimporttsv.bulk.output 时,将会先生成 HFile 文件的内部格式的文件,这时并不会写数据到 HBase 中。建议使用 √
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=hdfs://storefile-outputdir <tablename> <hdfs-data-inputdir>

注意:使用 importtsv -Dimporttsv.bulk.output 选项时,如果目标表尚不存在,则将使用默认列族描述符创建目标表。如果准备了大量数据要进行Bulk Load,请确保对目标 HBase 表进行适当的预分区,也就是预先创建多个 Region ,避免热点与数据倾斜问题。

importtsv 可以使用 -D 指定的其他选项,以下列举了11条:

  • -Dimporttsv.skip.bad.lines=true / false :在导入过程中,如果有不符合分割标准的行,被称之为 badlines ,设置是否跳过,如果不跳过,则 MapReduce 任务停止。
  • -Dimporttsv.separator=’|’ :例如使用 管道符 来代替 tab 键(\t),importtsv 默认是以 tab 键分隔。
  • -Dimporttsv.timestamp=currentTimeAsLong :使用特殊的时间戳导入。
  • -Dimporttsv.mapper.class=my.Mapper :用户定义的Mapper代替org.apache.hadoop.hbase.mapreduce.TsvImporterMapper。
  • -Dmapreduce.job.name=jobName :用户指定 MapReduce 任务名称
  • -Dmapreduce.job.queuename=queue:指定作业提交到的队列名
  • -Dmapreduce.job.priority=VERY_HIGH / HIGH / NORMAL / LOW / VERY_LOW :指定作业的优先级
  • -Dcreate.table=yes / no :如果 HBase 中没有创建表,是否使用 importtsv 工具创建该表,如果设置为 no,则在 HBase 中表必须存在。
  • -Dno.strict=true / false :忽略 HBase 表中的列族检查,默认为 false 。
  • -Dmapreduce.map/reduce.memory.mb=5120 :map / reduce 端分配的内存大小,一般来说是 1024 的倍数,这里配置了 5G。
  • -Dmapreduce.map/reduce.java.opts=-Xmx4096m :指定 map / reduce 端的 JVM 参数,这个的大小一般是上一个参数的 0.75 倍,要剩一些内存给非 JVM 进程。

尽管 importtsv 工具在许多情况下很有用,但高级用户可能希望以编程方式生成数据,或使用其他格式导入数据。如果有这样的需求,请深入了解 ImportTsv.java 和 HFileOutputFormat 的 JavaDoc ,修改源码进行实现。

3.2 完成数据加载,将HFile加载到HBase中

completebulkload 工具用于将数据导入正在运行的 HBase 中。此命令行工具遍历准备好的数据文件(HFile),确定每个 HFile 所属的 Region,然后联系相应的 RegionServer 将 HFile 移入其存储目录并将数据供客户端使用。

如果在 Bulk Load 准备过程中或在准备和完成步骤之间 Region 边界已更改,则 completebulkload 工具会自动将 HFile 拆分为与新边界对应的部分。此过程效率不高,因此用户应尽量减少 准备 HFile将 HFile 加载到 HBase 中 这两步骤之间的时间延迟,尤其是在其他客户端通过其他方式同时加载数据时也要注意。

将 HFile 加载到 HBase 中有两种方式:

  • LoadIncrementalHFiles
hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>
  • completebulkload
export HBASE_HOME=/usr/hdp/{hdp-version}/hbase
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-{version}.jar completebulkload <hdfs://storefileoutput> <tablename>

四、示例

说一下我的运行环境:CentOS-7,1个 HBase Master,3个 RegionServer,三台机器均是 8G 内存。

4.1 创建表的同时创建10个分区

create 'default:people', {NAME=>'basic_info'}, {NAME=>'other_info'}, SPLITS=>['10|','20|','30|','40|','50|','60|','70|','80|','90|']

创建的 people 表如下所示:

4.2 准备数据源并上传到HDFS

用 Python 生成了10万条测试数据并存到了 hbase_data.txt 中,一共7.32M,现在将该文件上传到 HDFS 中:

sudo -u hdfs hdfs dfs -put /tmp/hbase_data.txt /tmp

测试数据是我用python写的,有详细的说明和源码,详情点击:Python生成HBase测试数据说明 。

4.3 通过importtsv工具生成HFile文件

使用 importtsv 工具生成 HFile 文件,执行如下命令:

sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns='HBASE_ROW_KEY,basic_info:name,basic_info:age,basic_info:sex,basic_info:edu,other_info:telPhone,other_info:email,other_info:country' -Dimporttsv.bulk.output=/tmp/people/output people /tmp/hbase_data.txt

请确保执行该命令的用户有相应的权限。后台会触发一个 MapReduce 任务,由于表中创建了 10 个 Region,所以触发的任务内有 1 个 map,10 个 reduce,该任务一共执行了2分45秒。

4.4 将HFile数据加载到HBase中

两种方式:

  • LoadIncrementalHFiles
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/people/output people

执行上述语句总时长大约26秒。

  • completebulkload
export HBASE_HOME=/usr/hdp/3.0.1.0-187/hbase
sudo -u hdfs HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-2.0.0.3.0.1.0-187.jar completebulkload /tmp/people/output people

小结:上述两种方式均可以实现将 HFile 数据导入到 HBase 中,其原理就是将 HFile 移动到 HBase 表的对应目录下存储。

在 hbase shell 里执行 scan ‘people’ ,将所有数据读取一遍,我们再通过 HBase Web UI ,查看 people 表的各 region 的详细情况。如下图所示:

由表分析可知,10万条 数据 较均匀地 分配到了 10Region 中。自此,数据批量导入到 HBase 中完毕!

五、总结

参考的 HBase 官网:

  • http://hbase.apache.org/book.html#arch.bulk.load
  • http://hbase.apache.org/book.html#importtsv
  • http://hbase.apache.org/book.html#completebulkload

在使用 importtsv 工具时,一定要注意参数 -Dimporttsv.bulk.output 的配置。通常来说使用 Bulk Load Data 的方式对 RegionServer 来说更加友好一些,这种方式加载数据几乎不占用 RegionServer 的计算资源,因为只是在 HDFS上 移动了 HFile 文件,然后通知 HMaster 将该 RegionServer 的一个或多个 Region 上线。

另外在进行 Bulk Load 时,也需要确保执行用户在HDFS上有相应的权限。

我将 HBase 数据导入常用的三种方式进行了总结,其中着重说明了一下 Bulk Load 方式,如下图所示:


--END--

码字不易,如果您觉得文章写得不错,请关注作者~ 您的关注是我写作的最大动力

友情提示:原文排版精美,可点击分享链接查看。

码字不易,如果感觉本文对您有帮助,请点赞或订阅支持一下,您的支持是我坚持写作最大的动力,谢谢!

这个现代时代,一切都被数字化了,电子书已成为主流,电子书有多种格式,如 PDF、EPUB、MOBI、AZW3 和 IBA 等。

大多数电子书阅读器支持几乎所有格式,但是,某些电子书阅读器可能不支持特定格式,例如,ASW3 文件只能由 Amazon Kindle 查看。在这种情况下,我们需要将电子书从一种格式转换为另一种支持的格式,在本快速教程中,我们将了解如何在 Linux 中轻松地将电子书从 PDF 转换为 EPUB 格式(反之亦然)。

有许多在线和离线应用程序可以将电子书从一种格式转换为另一种格式,出于本教程的目的,我们将使用Calibre电子书套件,它允许我们从 CLI 和 GUI 转换电子书。

在 Linux 中安装 Calibre

Calibre 是一个免费的开源电子书软件套件,用于阅读、编辑、组织、创建和转换电子书,以及将电子书与其他电子书阅读器同步。

Calibre 可在 Linux、macOS 和 Windows 等所有主要计算机操作系统上运行,并且提供控制台和图形版本。

要在 Arch Linux 及其变体(如 EndeavourOS 和 Manjaro Linux)中安装 Calibre,请运行:

$ sudo pacman -S calibre

在 Debian、Ubuntu、Pop OS 中安装 Calibre:

$ sudo apt install calibre

Fedora:

$ sudo dnf install calibre

openSUSE:

$ sudo zypper install calibre

现在,让我们看看将 PDF 文件转换为 EPUB 格式的命令行方式。

使用 Calibre 从命令行将 PDF 文件转换为 EPUB 格式

Calibre 套件有一个名为“ebook-convert”的命令行工具,用于在不同格式之间进行电子书转换。

要将电子书从 PDF 转换为 EPUB 格式,只需运行:

$ ebook-convert file.pdf file.epub --enable-heuristics

此命令会将给定的 PDF 文档转换为.epub格式并将输出文件保存在当前目录中。

样本输出:

Conversion options changed from defaults:
  enable_heuristics: True
1% Converting input to HTML...
InputFormatPlugin: PDF Input running
on /home/ostechnix/file.pdf
[...]
Splitting markup on page breaks and flow limits, if any...
 Looking for large trees in index.html...
 No large trees found
 Split into 84 parts
Generating default cover
EPUB output written to /home/ostechnix/file.epub
Output saved to   /home/ostechnix/file.epub

您现在可以使用任何 EPUB 查看器应用程序查看 EPUB 文件。众所周知,Calibre 支持几乎所有的电子书格式。

在这里,该--enable-heuristics选项用于启用启发式处理,它使用常见模式修改文档文本和结构。通过此选项后,Calibre 将扫描您的电子书以查找常见模式并自动修复它们。默认情况下禁用此选项。

通常,启用启发式处理可以提高质量。以防万一,如果输出文件没有按预期输出,只需删除此选项,然后再试一次,如下所示。

$ ebook-convert file.pdf file.epub

您还可以使用这些--disable-*选项禁用单个启发式处理操作。

例子:

$ ebook-convert file.pdf file.epub --enable-heuristics --disable-italicize-common-cases

ebook-convert 接受很多参数来微调 Ebook 转换任务。要了解所有支持的选项,请查看ebook-convert命令的官方文档。

你们中的一些人更喜欢图形方法而不是 CLI 方式。如果是这样,Calibre 也有图形版本。

使用 Calibre 图形界面进行电子书转换

从菜单或应用程序启动器启动 Calibre 应用程序。单击菜单栏中的“添加书籍”按钮,然后从本地驱动器中选择 PDF 文件。

添加 PDF 文件后,单击“转换书籍”选项。

在下一个窗口中,选择输出格式。我要将 PDF 文件转换为 EPUB 格式,所以我从下拉列表中选择了“EPUB”。

Calibre 允许您对输出文件进行大量自定义。Calibre 界面的左侧窗格中显示了几个部分。每个部分都允许您更改各种设置并微调转换过程。

使用 Calibre,您可以进行以下自定义:

  • 编辑和更改电子书的元数据(例如标题、作者姓名、出版商名称、标签等),
  • 更改外观和感觉(例如字体类型、大小、文本对齐方式、布局、样式),
  • 启用启发式处理,
  • 页面设置(例如调整页边距),
  • 添加目录,
  • 搜索和替换文本,
  • 添加/更改封面图片等。

从左窗格中选择相应的部分,并根据您的要求更改该部分中的给定参数,完成所有自定义后,单击“确定”继续。

转换完成后,转换后的文件保存在“Calibre Library”文件夹中,该文件夹通常位于$HOME您的 Linux 系统目录中。每个文件都存储在带有作者姓名的单独文件夹中。

您可以将转换后的文件上传到电子书阅读器,或者通过电子书查看器应用程序打开它并开始使用它。

结论

在本指南中,我们学习了如何使用 Calibre 软件套件将电子书从 PDF 格式转换为 EPUB。由于 Calibre 可作为 CLI 和 GUI 版本使用,您可以从终端或 GUI 窗口进行电子书转换。