-
Notifications
You must be signed in to change notification settings - Fork 1
/
audible-dl.1
254 lines (254 loc) · 7.84 KB
/
audible-dl.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
.\" http://man.openbsd.org/mdoc.7
.Dd July 7, 2022
.Dt AUDIBLE-DL 1
.Os
.Sh NAME
.Nm audible-dl
.Nd A downloader for your Audible audiobook library.
.\"======================================================================
.Sh SYNOPSIS
.Nm audible-dl
.Op Fl h, -help
.Op Fl l, -log
.Op Fl a, -account Ar account
.Op Fl i, -import Ar file.har
.Op Fl s, -single Ar file.aax
.\"======================================================================
.Sh DESCRIPTION
.Pp
.Nm
is a simple command-line utility to create offline archives of your
Audible library as DRM-free .m4b files, wrapping
.Xr ffmpeg 1
in order to crack Audible's DRM. It supports multiple Audible
accounts and can be used to convert pre-downloaded .aax files.
.\"======================================================================
.Ss Prerequisites
.Pp
In order for
.Nm
to be useful, you need two things. Firstly, a HAR
.Pq HTTP Archive Format
file containing your Audible authentication cookies which we use to
scrape your account. You can get this
by logging into
.Lk https://audible.com
in your browser, opening the network tab of the element inspector,
then navigating to
.Lk https://audible.com/library/titles
and right-clicking on the GET request to that page, selecting
.Qq Copy All As HAR .
This can then be pasted into a file. Secondly, your Audible
activation bytes which are required to crack the DRM on .aax files.
There are multiple ways to get them, the one I had the most luck with
was a dedicated plugin for RainbowCrack; just follow the instructions
on
.Lk https://github.com/inAudible-NG/tables.
.\"======================================================================
.Pp
Technically, only the second step is required if you just want to
convert .aax files to .m4b files, though at that point you might as
well just write a quick
.Xr ffmpeg 1
script instead.
.\"======================================================================
.Pp
Once you have your activation bytes and authentication cookies, add
the former to your config file (see
.Sx audible-dl EXAMPLES )
and import the latter with:
.Bd -literal
audible-dl -i path/to/cookies.har
.Ed
.\"======================================================================
.Ss Options
.Pp
.Nm
supports a few command-line options:
.Bl -tag -width DS
.It Fl h, -help
Display a quick help message.
.It Fl l, -log
Save a log of the scraper's progress into the file
.Pa .audible-dl-debug.log .
The contents of this file may be useful in bug reports.
.It Fl a, -account Ar account
Some operations like converting a single .aax file or importing
authentication cookies from a .har file require that you specify an
account with which to perform the operation. The argument should be
the account's
.Em name
field in the config file. This option may be omitted if you have only
one account set up.
.It Fl i, -import Ar path/to/file.har
Import authentication cookies from a HAR archive into the specified account.
.It Fl s, -single Ar path/to/file.aax
Convert a single .aax file into an .m4b file using the specified account.
.El
.\"======================================================================
.Ss Configuration
.Pp
In order to use
.Nm
a YAML config file must be created. At the very minimum it must
contain a list named
.Ic accounts
where each entry contains at least a
.Ic name
and a
.Ic bytes
field. If
.Ev AUDIBLE_DL_ROOT
is unset the file should also contain a
.Ic savedir
field specifying the directory in which to save downloaded
audiobooks. If that variable is set and
.Ic savedir
specifies a directory, then books are saved into that directory rather
than the one pointed to by the variable.
.Pp
More config options may be added in the future, including naming
rules for downloaded books and the ability to specify things like the
.Ic savedir
on a per-account basis.
.\"======================================================================
.Sh ENVIRONMENT
.Bl -tag -width DS
.It Ev AUDIBLE_DL_ROOT
When set to an existing directory, tell
.Nm
to look for all of its state beneath it. Downloaded books will be
saved there and temporary and system files will be stored in the
.Pa .audible-dl/
subdirectory.
.It Ev XDG_CONFIG_HOME
By default,
.Nm
looks for its config file, authentication cookies, and list of
downloaded books in the
.Pa audible-dl/
subdirectory. The appropriate configuration directory is inferred
using Golang's
.Ic os.UserConfigDir()
function which will return something completely different on Mac OS,
Windows, and Plan 9.
.It Ev XDG_CACHE_HOME
By default,
.Nm
stores temporary intermediate files in the
.Pa audible-dl/temp/
directory. The appropriate cache directory is inferred using Golang's
.Ic os.UserCacheDir()
function and will return different values on Mac OS, Windows, and Plan
9.
.El
.\"======================================================================
.Sh FILES
.Bl -tag -width DS
.It Pa config.yml
The core configuration file.
.It Pa downloaded_books.json
A list of the books that have already been downloaded. This file
allows the you to organize and rename your audiobooks at your
leisure.
.It Pa [name].cookies.json
Each account's authentication cookies.
.El
.\"======================================================================
.Sh EXAMPLES
.Ss Average use-case
.Pp
Most users will likely want to use
.Nm
to download books in its default run mode with
.Ev AUDIBLE_DL_ROOT
unset. For someone with a single account, their config file,
.Pa ~/.config/audible-dl/config.yml ,
will look like this:
.Bd -literal
savedir: "~/Audiobooks/Audible/"
accounts:
- name: "Personal"
bytes: "deadbeef"
.Ed
.Pp
After running
and
.Pa ~/Audiobooks/Audible/
will contain all their books as .m4b files ready to be transferred to
a phone or mp3 player or indexed into an audiobook library browser.
.\"======================================================================
.Ss Keeping all state in a single directory
.Pp
I like to synchronize my media between several machines, so my
preference is to keep everything in a single directory. In my shell's
rc file I have:
.Bd -literal
export AUDIBLE_DL_ROOT="$HOME/media/audiobooks/audible"
.Ed
.Pp
In
.Pa ~/media/audiobooks/audible/.audible-dl/config.yml
I have:
.Bd -literal
accounts:
- name: "Personal"
bytes: "deadbeef"
- name: "Other"
bytes: "beefdead"
.Ed
.Pp
Note that I have two accounts set up.
.\"======================================================================
.Sh SEE ALSO
.Xr ffmpeg 1
.Xr ffprobe 1
.Rs
.%B tables
.%U https://github.com/inAudible-NG/tables
.Re
.Rs
.%B Cozy
.%U https://cozy.sh
.Re
.Rs
.%B Voice
.%U https://github.com/PaulWoitaschek/Voice
.Re
.Rs
.%B OpenAudible
.%U https://openaudible.org
.Re
.Rs
.%B audiobookshelf
.%U https://www.audiobookshelf.org
.Re
.\"======================================================================
.Sh AUTHORS
.An ꙮ Aq Mt ymir@ulthar.xyz
.\"======================================================================
.Sh HOME
.Em https://sr.ht/~thalia/audible-dl
.\"======================================================================
.Sh BUGS
.Pp
As of the writing of this I am not aware of any bugs. If you find
any, most likely due to a change in Audible's website, please report
them by sending a detailed email to
.Mt ~thalia/audible-dl@lists.sr.ht .
If possible, please attach the
.Pa .audible-dl-debug.html
and
.Pa .audible-dl-debug.log
files as well as your config file, cookie file(s), and downloaded
books file with all personal info censored.
.\"======================================================================
.Sh SECURITY CONSIDERATIONS
.Pp
.Nm
stores your Audible authentication cookies in plain-text json files.
This means that an attacker who gains access to them will be able to
log into your Audible account in the browser. Ideally, we wouldn't
have to manage sensitive data ourselves and would simply source your
username and password from your system's keychain, but I've found
Audible's login process to be too complex to easily reverse engineer.