有声读物
有声读物媒体可以是音频 CD 或下载文件,存在多种格式。对于某些硬件媒体播放器,特定的格式是必要的。本文档介绍了如何创建或转换各种格式类型的有声读物。
iPod 兼容格式
本节的目的是详细介绍使用 Linux 原生工具从数字媒体创建 iPod 友好型有声读物的过程。
为 iPod 设计的有声读物在很大程度上与 MPEG-4 音频文件相同 — 它包含音频流和关于该流的信息(元数据)。 两个区别是:一是它被包装在一个特别命名的 MPEG-4 容器 (.m4b) 中;二是它添加了章节索引到元数据中。章节索引使用 Quicktime 标准。
基本过程如下:音频源被解码/解压缩(通常最好有一个解码后的纯音频文件,因为这将简化稍后的文件连接/分割,并防止元数据标签的混合);之后,音频文件被编码为 AAC 格式 — 使用 MPEG-4 容器;最后,添加章节索引和音频信息标签。
有多种工具可用于帮助创建有声读物文件。
工具
- faac — 开源 AAC 编码器
- neroaacenc-binAUR — 专有 AAC 编码器
- gpac — 用于操作 MPEG-4 媒体的多媒体框架
- lame — MP3 编码器和解码器
提取或解码
如果音频源文件是光盘媒体,则需要提取;如果是编码文件,则需要解码。
如果有声读物是光盘媒体,则有多种 数字音频提取实用程序 可用。 从 CD 提取音频到 WAV 格式文件的常用方法是
cdparanoia -B
如果有声读物是音频文件,则可以使用各种程序对其进行解码。 例如,对于 MP3
lame --decode part-01.mp3
(如果不需要分割连接,文件可以直接编码为带有 MPEG-4 容器的 AAC。)
连接或分割
有声读物部分通常以大约一小时十分钟的片段保存(通常是音频 CD 的时间长度)。 它们可以根据需要连接或分割。
连接 WAV 文件
sndfile-concat track-01.wav track-02.wav… disc-1.wav # or more easily sndfile-concat track*.wav disc-1.wav
连接 MPEG-4 兼容音频 文件(AAC、AVI、MP3…)
MP4Box -cat track-01.aac -cat track-02.aac… disc-1.aac
分割 wav 文件 (wavsplitAUR 可以做到这一点(未经测试))。
将 MP3 文件分割成 10 分钟间隔
mp3splt -f -t 10.0 part-01.mp3 -o @n
按章节/音轨分割 MP3(此方法扫描静音并假定它们是章节/音轨标记,并在这些标记上分割它们 — 这些设置是通用的,可能需要进一步调整才能工作)
mp3splt -f -s -p -min=3 part-01.mp3
分割 MPEG 4 兼容音频 文件(可能需要元数据修复)成 10 分钟间隔。
MP4Box -split 600 target.mp4
编码
存在多个可以编码为 AAC 的程序。
要使用开源编码器 FAAC 进行编码
faac -q 80 -o part-01.aac part-01.wav faac -q 80 -o part-01.m4b part-01.wav -w # with a MPEG-4 container(wrapper)
要使用专有编码器 Nero 进行编码
neroAacEnc -q 0.7 -of part-01.aac -if part-01.wav
ffmpeg
可以一步将 MP3 转换为 AAC 编码 (ffmpeg -i track1.mp3 -acodec aac -strict -2 track1.aac
),但对 AAC 的支持是实验性的。章节索引合并
要将章节索引合并到音频文件中,必须确定使用哪种类型的索引:一种是周期性间隔,具有周期性的章节时间;另一种是特定间隔,具有明确的章节时间和名称。
向音频文件添加 MPEG-4 容器
MP4Box -add disc-1.aac disc-1.m4b
周期性间隔
要合并章节索引,每 10 分钟一个章节
mp4chaps --every 600 disc-1.m4b
特定间隔
该方法需要将章节索引编写为文本文件,并将其合并到音频文件中。
--import
选项将章节索引与音频文件合并时,mp4chaps
会抱怨没有看到视频流(可能应该提交错误报告)。 另一种方法是使用 MP4Box
。 虽然 MP4Box 通常用于视频文件,但它具有添加章节的功能,而不会引入视频流。 因此,生成的媒体将能够像预期一样在 iPod 和 iTunes 上播放。章节索引需要先编写为文本文件,然后才能合并到音频文件中。 章节索引有两个标准:一是 Quicktime 标准;二是 Nero 标准。 都可以先合并。
Quicktime 标准如下所示(也可以添加千分之一秒 .000
)
00:00:00 Track 01 00:08:40 Track 02 ...
Nero 标准如下所示
CHAPTER1=00:00:00 CHAPTER1NAME=Track 01 CHAPTER2=00:08:40 CHAPTER2NAME=Track 02 ...
要合并章节索引文件
MP4Box -chap disc-1.chapters.txt disc-1.m4b
要一步合并章节索引文件以及音频文件和容器
MP4Box -chap disc-1.chapters.txt -add disc-1.aac disc-1.m4b
章节索引需要转换为 Quicktime 标准(虽然 MP4Box 在导入时会识别两种章节索引标准,但它导入时使用 Nero 标准)。 使用以下命令转换为 Quicktime 标准
mp4chaps --convert --chapter-qt disc-1.m4b
现在可以测试章节索引,例如使用 VLC。
标签
可以使用许多 标签程序。 由 libmp4v2 提供的基本命令行程序具有多种功能
$ mp4tags -album "An Good Audiobook" -artist "John Doe" -disk 2 -disks 10 -genre Nonfiction -albumartist "Ms. Foo Bar" -song "Disc 2" -year 2004 disc1.m4b
添加封面
$ mp4art --add a-good-audiobook.jpg disc-1.m4b
优化容器
$ mp4file --optimize *.m4b
批量处理示例
可以使用循环处理多个音频文件
for m in *.mp3; do lame --decode "$m" faac -q 80 -o "${m%.*}".aac "$m" done
写入顺序光盘编号的标签
for b in *.m4b; do [ "$n" ] && n=$((10#$n + 1)) [ -z "$n" ] && n=1 mp4tags -album "An Good Audiobook"… -disk $(printf "%02u" $n)… "$b" done
Audible 格式
转换 Audible 图书格式可能是一个费力的过程 — 文章。
一个更简单的方法是使用此脚本从下载的 Audible 有声读物中检索您的激活字节 — 链接。
然后您可以使用 mpv 收听文件
$ mpv --demuxer-lavf-o=activation_bytes=<your activation bytes> <filename>.aax
或者您可以使用 ffmpeg (文档) 将文件写入未加密的 .mp4
$ ffmpeg -activation_bytes <your activation bytes> -i <filename>.aax -vn -c:a copy <output>.mp4
生成的文件将具有完整的章节标题。
参见
- Wikipedia:.m4b
- ripitAUR — 彻底的 DAE,具有使用
--book
选项创建章节索引的能力。