0%

安装yt-dlp

1
2
brew install yt-dlp
brew install ffmpeg

查看需要下载的视频信息

1
2
3
yt-dlp -F [视频链接]
-F #查看视频格式构成
--proxy [系统代理] #填写你的系统代理设置,如果使用全局模式可不使用此语句。

效果

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
[liudongkai@MBPR DIR]$ yt-dlp -F 'https://www.youtube.com/watch?v=BfKhREVFLkQ'
[youtube] BfKhREVFLkQ: Downloading webpage
[youtube] BfKhREVFLkQ: Downloading android player API JSON
[info] Available formats for BfKhREVFLkQ:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27 0 │ mhtml │ images storyboard
sb1 mhtml 80x45 0 │ mhtml │ images storyboard
sb0 mhtml 160x90 0 │ mhtml │ images storyboard
139 m4a audio only 2 │ 14.75MiB 49k https │ audio only mp4a.40.5 49k 22k low, m4a_dash
249 webm audio only 2 │ 14.75MiB 49k https │ audio only opus 49k 48k low, webm_dash
250 webm audio only 2 │ 19.28MiB 64k https │ audio only opus 64k 48k low, webm_dash
140 m4a audio only 2 │ 39.16MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
251 webm audio only 2 │ 37.87MiB 125k https │ audio only opus 125k 48k medium, webm_dash
17 3gp 176x144 6 1 │ 24.10MiB 80k https │ mp4v.20.3 80k mp4a.40.2 0k 22k 144p
394 mp4 256x144 25 │ 21.49MiB 71k https │ av01.0.00M.08 71k video only 144p, mp4_dash
160 mp4 256x144 25 │ 28.80MiB 95k https │ avc1.4d400c 95k video only 144p, mp4_dash
278 webm 256x144 25 │ 27.91MiB 92k https │ vp9 92k video only 144p, webm_dash
395 mp4 426x240 25 │ 42.74MiB 141k https │ av01.0.00M.08 141k video only 240p, mp4_dash
133 mp4 426x240 25 │ 64.43MiB 213k https │ avc1.4d4015 213k video only 240p, mp4_dash
242 webm 426x240 25 │ 53.42MiB 177k https │ vp9 177k video only 240p, webm_dash
396 mp4 640x360 25 │ 77.45MiB 256k https │ av01.0.01M.08 256k video only 360p, mp4_dash
134 mp4 640x360 25 │ 133.02MiB 440k https │ avc1.4d401e 440k video only 360p, mp4_dash
18 mp4 640x360 25 2 │ 176.85MiB 585k https │ avc1.42001E 585k mp4a.40.2 0k 44k 360p
243 webm 640x360 25 │ 94.81MiB 313k https │ vp9 313k video only 360p, webm_dash
397 mp4 854x480 25 │ 135.38MiB 448k https │ av01.0.04M.08 448k video only 480p, mp4_dash
135 mp4 854x480 25 │ 252.89MiB 836k https │ avc1.4d401e 836k video only 480p, mp4_dash
244 webm 854x480 25 │ 163.98MiB 542k https │ vp9 542k video only 480p, webm_dash
22 mp4 1280x720 25 2 │ ~562.06MiB 1815k https │ avc1.64001F 1815k mp4a.40.2 0k 44k 720p
398 mp4 1280x720 25 │ 273.87MiB 906k https │ av01.0.05M.08 906k video only 720p, mp4_dash
136 mp4 1280x720 25 │ 510.01MiB 1686k https │ avc1.4d401f 1686k video only 720p, mp4_dash
247 webm 1280x720 25 │ 308.25MiB 1019k https │ vp9 1019k video only 720p, webm_dash
399 mp4 1920x1080 25 │ 478.48MiB 1582k https │ av01.0.08M.08 1582k video only 1080p, mp4_dash
137 mp4 1920x1080 25 │ 961.41MiB 3179k https │ avc1.640028 3179k video only 1080p, mp4_dash
248 webm 1920x1080 25 │ 517.76MiB 1712k https │ vp9 1712k video only 1080p, webm_dash

从结果中可知最佳画质视频ID为mp4格式的137和webm格式的248(纯视频无音轨),最佳音轨ID为m4a格式的140和webm格式的251(纯音轨无视频)。如果你认为720p已经满足需求,则只下载ID22也可(已经包含视频和音轨)。

以webm为例,将最高质量的webm视频和webm音轨进行合并。

下载音视频并合并

1
2
3
4
5
6
yt-dlp -f [下载ID] [代理配置] [视频链接] [合并语句] [外部下载器选择] [下载器参数]
-f [id] #选择下载内容,注意和 -F 区分。以webm为例,可使用248+251,如果你只下载720p则填写22就好,后面的合并语句可不填写。
--proxy #代理配置 见前文
--merge-output-format [合并输出格式] #合并时可使用的容器格式,以“/”分隔,例如“mp4/mkv”。如果不需要合并,则忽略。(目前支持:avi、flv、mkv、mov、mp4、webm)
--downloader [指定外部下载器] #外部下载器名称或路径,目前支持原生、aria2c、avconv、axel、curl、ffmpeg、httpie、wget。
--downloader-args [下载器名称]:"[下载器配置]"

效果

1
2
3
4
5
6
7
8
9
10
11
[liudongkai@MBPR DIR]$ yt-dlp -f 248+251 'https://www.youtube.com/watch?v=BfKhREVFLkQ' --merge-output-format webm
[youtube] BfKhREVFLkQ: Downloading webpage
[youtube] BfKhREVFLkQ: Downloading android player API JSON
[info] BfKhREVFLkQ: Downloading 1 format(s): 248+251
[download] Destination: ENG SUB《陈情令 The Untamed》EP01——主演:肖战、王一博、孟子义 [BfKhREVFLkQ].f248.webm
[download] 100% of 517.76MiB in 01:45 at 4.91MiB/s
[download] Destination: ENG SUB《陈情令 The Untamed》EP01——主演:肖战、王一博、孟子义 [BfKhREVFLkQ].f251.webm
[download] 100% of 37.87MiB in 00:08 at 4.71MiB/s
[Merger] Merging formats into "ENG SUB《陈情令 The Untamed》EP01——主演:肖战、王一博、孟子义 [BfKhREVFLkQ].webm"
Deleting original file ENG SUB《陈情令 The Untamed》EP01——主演:肖战、王一博、孟子义 [BfKhREVFLkQ].f248.webm (pass -k to keep)
Deleting original file ENG SUB《陈情令 The Untamed》EP01——主演:肖战、王一博、孟子义 [BfKhREVFLkQ].f251.webm (pass -k to keep)

下载完成后ffmpeg合并视频和音轨,输出至你的cmd的当前路径。

安装youtubedr

1
2
brew install youtubedr
brew install ffmpeg

查看需要下载的视频信息

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
[liudongkai@MBPR DIR]$ youtubedr info 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

Title: 第五季 | 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】
Author: 畫江湖動畫 Drawing Jianghu
Duration: 1m3s

+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
| ITAG | FPS | VIDEO | AUDIO | AUDIO | SIZE [MB] | BITRATE | MIMETYPE |
| | | QUALITY | QUALITY | CHANNELS | | | |
+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
| 271 | 25 | 1080p | | 0 | 17.2 | 2298678 | video/webm; codecs="vp9" |
| 400 | 25 | 1080p | | 0 | 15.5 | 2075227 | video/mp4; codecs="av01.0.08M.08" |
| 137 | 25 | 1080p | | 0 | 11.5 | 1540933 | video/mp4; codecs="avc1.640028" |
| 248 | 25 | 1080p | | 0 | 9.3 | 1246099 | video/webm; codecs="vp9" |
| 399 | 25 | 1080p | | 0 | 7.3 | 983101 | video/mp4; codecs="av01.0.08M.08" |
| 247 | 25 | 720p | | 0 | 5.3 | 710126 | video/webm; codecs="vp9" |
| 136 | 25 | 720p | | 0 | 4.6 | 613055 | video/mp4; codecs="avc1.4d401f" |
| 398 | 25 | 720p | | 0 | 4.2 | 562648 | video/mp4; codecs="av01.0.05M.08" |
| 22 | 25 | 720p | medium | 2 | 5.6 | 742192 | video/mp4; codecs="avc1.64001F, mp4a.40.2" |
| 135 | 25 | 480p | | 0 | 2.7 | 356167 | video/mp4; codecs="avc1.4d401e" |
| 244 | 25 | 480p | | 0 | 2.9 | 382376 | video/webm; codecs="vp9" |
| 18 | 25 | 360p | low | 2 | 3.6 | 487537 | video/mp4; codecs="avc1.42001E, mp4a.40.2" |
| 397 | 25 | 480p | | 0 | 2.2 | 298541 | video/mp4; codecs="av01.0.04M.08" |
| 134 | 25 | 360p | | 0 | 1.5 | 198119 | video/mp4; codecs="avc1.4d4015" |
| 243 | 25 | 360p | | 0 | 1.6 | 216536 | video/webm; codecs="vp9" |
| 396 | 25 | 360p | | 0 | 1.2 | 165822 | video/mp4; codecs="av01.0.01M.08" |
| 133 | 25 | 240p | | 0 | 0.7 | 100255 | video/mp4; codecs="avc1.4d400d" |
| 242 | 25 | 240p | | 0 | 0.8 | 103754 | video/webm; codecs="vp9" |
| 251 | 0 | | medium | 2 | 0.9 | 117014 | audio/webm; codecs="opus" |
| 140 | 0 | | medium | 2 | 1.0 | 129567 | audio/mp4; codecs="mp4a.40.2" |
| 395 | 25 | 240p | | 0 | 0.6 | 86192 | video/mp4; codecs="av01.0.00M.08" |
| 160 | 25 | 144p | | 0 | 0.4 | 47400 | video/mp4; codecs="avc1.4d400b" |
| 250 | 0 | | low | 2 | 0.4 | 58873 | audio/webm; codecs="opus" |
| 278 | 25 | 144p | | 0 | 0.4 | 55883 | video/webm; codecs="vp9" |
| 394 | 25 | 144p | | 0 | 0.4 | 48707 | video/mp4; codecs="av01.0.00M.08" |
| 249 | 0 | | low | 2 | 0.3 | 44740 | audio/webm; codecs="opus" |
+------+-----+---------+---------+----------+-----------+---------+--------------------------------------------+
  • 第三列的Video Quality,就是你想要下载的视频质量,也就是清晰度
  • 最后一列的MIMETYPE告诉你视频的文件类型,一般就选mp4

下载视频

1
youtubedr download -q 271 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

这只是下载了视频。。还没有下载音频!!
第五列 AUDIO CHANNELS 找那些为2的行,
第四行 AUDIO QUALITY 尽量选medium的,
第三行 VIDEO QUALITY 为空的,
最后一列 MIMETYPE 为audio/mp4,
我们定位到质量最好的音频ITAG为 140。

下载音频

1
youtubedr download -q 140 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

现在下载了一个视频和一个音频。。。还差合并这一步,我们得合并下就大功告成了!!

合并视频与音频

1
2
3
4
# 合并下载的音频与视频
ffmpeg -i '源视频文件.mp4' -i '源音频文件.m4a' -vcodec copy -acodec copy 输出文件.mp4

# 例:ffmpeg -i 'Peru 8K HDR 60FPS (FUHD).mp4' -i 'Peru 8K HDR 60FPS (FUHD).m4a' -vcodec copy -acodec copy output.mp4

Youtube-dl 这套强大的网络影片下载器,目前很多朋友可能会使用一些线上下载YouTube的网站,除了网页上满满的广告之外,还可能会常常遇到画质、音质不佳、下载速度慢,或是根本无法正常下载,毕竟 YouTube 也是随时在改版,虽然 Google 对于下载 YouTube 这件事算睁一只眼闭一只眼,但时不时还是会顺手防堵下载的漏洞。
而 youtube-dl 则是在 GitHub 上公开的开源软体,且他更新的频率相当惊人,几乎每隔几天就会更新,而更新内容大多都是针对各个影音网站的下载支持或功能修正。虽然 youtube-dl 没有 GUI,而是通过终端命令行操作,但非常轻量,且效率极佳。

安装 youtube-dl

请先安装 Homebrew,若你已经装好 Homebrew,则可以透过指令来安装 youtube-dl,打开终端并输入:

1
brew install youtube-dl

安装 ffmpeg

我们下载 YouTube 影片时可能会用到转档、嵌入字幕等功能,这些功能必须安装 ffmpeg 来达成。

1
brew install ffmpeg

运行

如上面所说,youtube-dl 没有GUI,而是通过终端操作,因此在应用程序里是找不到它的,必须使用终端来操作。

下载影片

在 macOS 中,终端预设目录是下载文件夹,但我们一般下载影片通常不会存在预设目录里,因此我们可以先指定下载目录。

选择好下载目录后,在终端输入 youtube-dl,后跟 YouTube 影片网址即可下载,以下载 YouTube 影片 第五季 | 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】 为例:

1
2
3
4
5
[liudongkai@MBPR DIR]$ youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

[youtube] aaIUjeg9MpY: Downloading webpage
[download] Destination: 第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.mp4
[download] 3.9% of 5.54MiB at 64.92KiB/s ETA 01:23

按下回车之后 youtube-dl 便开始下载,在没有设定任何下载选项的状况下,可以看到这支影片以预设的 WebM 格式下载到下载项目资料夹中。在 YouTube 下载影片,来源的影片文件可能是各种格式、分段或是影音分开,这时通常都是靠 ffmpeg 将其转换为单一的影片文件。

影片转档

刚刚下载的影片是 WebM 格式储存(有时可能是 mov 或 mkv 等等)不过其实 WebM 通常用于网页播放,我们一般在电脑、手机播放或剪辑,其实还是以 mp4 最通用。因此,我们可以在 youtube-dl 下载影片时,在指令后方加入 -f mp4 即可指定下载成 mp4 文件格式:

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' -f mp4

所以 -f 后面的文件格式也可以换成 3gp、aac、flv、m4a、mp3、mp4、ogg、wav、webm 等等。

下载完成的文件,以 YouTube 来说,下载的文件名称就是 影片名称-影片网址的编号.文件格式,如上文案例文件名为:第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.mp4

指定最高质量下载

YouTube 通常会提供不同分辨率、不同码率的影片文件,我们可以通过指定编码序号进行下载。首先使用 -F 参数查看相关编码序号与质量(注意F为大写)

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
[liudongkai@MBPR DIR]$ youtube-dl -F 'https://www.youtube.com/watch?v=aaIUjeg9MpY' 
[youtube] aaIUjeg9MpY: Downloading webpage
[info] Available formats for aaIUjeg9MpY:
format code extension resolution note
249 webm audio only tiny 44k , webm_dash container, opus @ 44k (48000Hz), 342.00KiB
250 webm audio only tiny 58k , webm_dash container, opus @ 58k (48000Hz), 450.04KiB
251 webm audio only tiny 117k , webm_dash container, opus @117k (48000Hz), 894.48KiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 990.85KiB
160 mp4 256x106 144p 47k , mp4_dash container, avc1.4d400b@ 47k, 25fps, video only, 362.21KiB
394 mp4 256x106 144p 48k , mp4_dash container, av01.0.00M.08@ 48k, 25fps, video only, 372.20KiB
278 webm 256x106 144p 55k , webm_dash container, vp9@ 55k, 25fps, video only, 427.04KiB
395 mp4 426x178 240p 86k , mp4_dash container, av01.0.00M.08@ 86k, 25fps, video only, 658.65KiB
133 mp4 426x178 240p 100k , mp4_dash container, avc1.4d400d@ 100k, 25fps, video only, 766.11KiB
242 webm 426x178 240p 103k , webm_dash container, vp9@ 103k, 25fps, video only, 792.85KiB
396 mp4 640x266 360p 165k , mp4_dash container, av01.0.01M.08@ 165k, 25fps, video only, 1.24MiB
134 mp4 640x266 360p 198k , mp4_dash container, avc1.4d4015@ 198k, 25fps, video only, 1.48MiB
243 webm 640x266 360p 216k , webm_dash container, vp9@ 216k, 25fps, video only, 1.62MiB
397 mp4 854x356 480p 298k , mp4_dash container, av01.0.04M.08@ 298k, 25fps, video only, 2.23MiB
135 mp4 854x356 480p 356k , mp4_dash container, avc1.4d401e@ 356k, 25fps, video only, 2.66MiB
244 webm 854x356 480p 382k , webm_dash container, vp9@ 382k, 25fps, video only, 2.85MiB
398 mp4 1280x532 720p 562k , mp4_dash container, av01.0.05M.08@ 562k, 25fps, video only, 4.20MiB
136 mp4 1280x532 720p 613k , mp4_dash container, avc1.4d401f@ 613k, 25fps, video only, 4.57MiB
247 webm 1280x532 720p 710k , webm_dash container, vp9@ 710k, 25fps, video only, 5.30MiB
399 mp4 1920x798 1080p 983k , mp4_dash container, av01.0.08M.08@ 983k, 25fps, video only, 7.34MiB
248 webm 1920x798 1080p 1246k , webm_dash container, vp9@1246k, 25fps, video only, 9.30MiB
137 mp4 1920x798 1080p 1540k , mp4_dash container, avc1.640028@1540k, 25fps, video only, 11.50MiB
400 mp4 2048x852 1080p 2075k , mp4_dash container, av01.0.08M.08@2075k, 25fps, video only, 15.49MiB
271 webm 2048x852 1080p 2298k , webm_dash container, vp9@2298k, 25fps, video only, 17.15MiB
18 mp4 640x266 360p 487k , avc1.42001E, 25fps, mp4a.40.2 (44100Hz), 3.64MiB
22 mp4 1280x532 720p 742k , avc1.64001F, 25fps, mp4a.40.2 (44100Hz) (best)

查看输出列表,找到画质音质最好的序号,案例中1920x798分辨率下视频最好的是271,音频最好的是140,得到这两个序号后,可以通过 youtube-dl -f 视频序号+音频序号 进行合并下载,这样下载后,视频和音频会自动合并。

1
2
3
4
5
6
[liudongkai@MBPR DIR]$ youtube-dl -f 271+140 'https://www.youtube.com/watch?v=aaIUjeg9MpY'
[youtube] aaIUjeg9MpY: Downloading webpage
WARNING: You have requested multiple formats but ffmpeg or avconv are not installed. The formats won't be merged.
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: 第五季 _ 預告 Trailer【畫江湖之不良人 第5季 The Degenerate-Drawing Jianghu S5】-aaIUjeg9MpY.f271.webm
[download] 5.8% of 17.15MiB at 942.21KiB/s ETA 00:17

注意:-f 后跟的两个序号需要必须先视频后音频

嵌入字幕

有时 YouTube 影片会有不同语言的 CC 字幕可选择,我们可以透过 youtube-dl 将字幕嵌入到影片中。

首先我们先列出可以下载的字幕,以上文案例为例,在 youtube-dl 下载指令后方加入 –list-subs

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' --list-subs

youtube-dl 分析 YouTube 网页后,在最下方 Available subtitles 列出可用的字幕包含:

  • zh-CN
  • en
  • zh
  • zh-TW

也就是简体中文、英文、中文、中文(台湾)这几种选择。

有关嵌入字幕的 youtube-dl 指令:

1
2
3
4
--write-sub #下载字幕
--embed-sub #嵌入字幕
—-sub-lang zh-CN #指定语言(以简体中文为例)
--all-subs #下载所有字幕(如果要将所有可用的字幕嵌入)

因此如果我们要下载嵌入简体中文字幕的 mp4 影片,指令为:

1
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY' --write-sub --embed-sub --sub-lang zh-CN -f mp4

支援嵌入字幕的影片格式包含:mp4、mkv 以及 webm;与格式工厂、HandBreak 那种将字幕直接写入在影片画面上的方式不同,使用 youtube-dl 嵌入的字幕是可以选择开启或关闭,以及选择不同语言的。此外,语系的代号大小写有别,必须一模一样,例如简体中文 zh-CN 的 CN 一定要是大写,非常重要!

下载完成后,以 QuickTime Player 打开,可以看到出现中文字幕的选项;若是以其他播放软体如 INNA 开启,也是可以选择字幕的,不过每个软件显示情况可能有所不同。

高级应用

指定格式以最优质量下载视频

1
2
3
4
5
6
# 指定视频为mp4格式、音频为m4a格式以最优质量下载youtube视频,其它网站暂未测试,官方说Windows下换单引号为双引号
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 或者直接使用默认设置,一般会下载两个webm文件,分别为视频和音频,
# 再自动合并成附带音轨的webm格式视频,测试发现也是最高分辨率,有4K就下4K版本
youtube-dl 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

以最优质量下载音频

1
2
3
4
5
6
7
8
# 默认下载音频为opus格式
youtube-dl -x 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 下载mp3格式的音频
youtube-dl -x --audio-format mp3 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

# 最优质量下载音频
youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

下载播放列表中的视频

1
2
3
4
5
6
7
8
# 使用默认,与下载单个视频格式一样
youtbue-dl 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

# 可以使用选项--playlist-start, --playlist-end或者指定某个视频 --playlist-items
# --playlist-items 可设置多个值.如:"--playlist-items 1,2,5 下载1、2、5项

# 下载列表第二个及以后的所有视频
youtube-dl --playstart-start 2 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

限定分辨率下载播放列表中的视频

1
2
# 以最高480P下载列表第3个及以后的所有视频
youtube-dl --playlist-start 3 -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

下载播放列表中视频的音轨

1
2
3
4
# 使用--playlist-start、--playlist-end、--playlist-items来限定

# 最优质量下载播放列表中3-6这四个视频的音频文件,并转换成mp3格式
youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 --playlist-start 3 --playlist-end 6 'https://www.youtube.com/watch?v=rbxjUvJjFhU&list=PLTQ0CcMHNrjudMnoc2wCxWk0el8AIhWhd'

调用aria2加速下载

​解决使用youtube-dl默认下载时常常断开连接的问题。

1
youtube-dl --external-downloader aria2c --external-downloader-args "-x 16 -k 1M" 'https://www.youtube.com/watch?v=aaIUjeg9MpY'

参数说明:

1
2
3
4
--external-downloader aria2c # 调用外部下载工具
--external-downloader-args # 外部下载工具指定参数
-x 16 # 启用aria2 16个线程,最多就支持16线程
-K 1M # 指定块的大小

参考:

You can use

1
brew install coreutils

And then whenever you need timeout, use

1
gtimeout

..instead. To explain why here’s a snippet from the Homebrew Caveats section:

Caveats

All commands have been installed with the prefix ‘g’.

If you really need to use these commands with their normal names, you can add a “gnubin” directory to your PATH from your bashrc like:

1
>PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Additionally, you can access their man pages with normal names if you add the “gnuman” directory to your MANPATH from your bashrc as well:

1
>MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

永久使用Parallels Desktop 17

本方法已通过几百名Mac玩家验证,亲测有效,是目前最佳方案!
本方法支持苹果Intel机型,也支持M1机型!支持最新Monterey系统,支持最新的PD17,还可以更新!
本方法可以全新安装,也可以直接启动已经安装好的Win11虚拟机或者Linux虚拟机,不会丢失数据!
本方法联网正常、网银正常、U盾、加密狗等USB设备连接正常,数字证书正常,总之就是官方正版绕过激活而已,所有正版的功能都可以正常使用!

方法一:修改时间

关闭PD软件,完全关闭
修改MacOS系统时间为2021年2月2日
开启PD虚拟机即可继续使用

注:此方法可以把标准版PD自动变成专业版。但时间不正确,会影响访问https的一些网页,可进入虚拟机后恢复正确时间来解决,不会影响虚拟机的运行。

方法二:指令启动

打开终端
输入:prlctl start "虚拟机名称" , 回车后直接进入

注:此方法可以启动若干虚拟机,虚拟机的名称可以在PD控制中心里查看。例如:prlctl start "Windows 11" ,虚拟机暂停后需要重新输入命令,可修改虚拟机暂停时间来解决。

prlctl

方法三:工具引导

工具下载:

注:此方法是目前最佳方法,重启电脑依然可以用,不用改变电脑任何设置,脱离PD激活管控,直接可以进入Windows虚拟机或者Linux虚拟机。以后退出虚拟机后,直接运行以上的小工具进入。虚拟机暂停或者休眠也可以用这个小工具唤醒。

Win11激活方式

1
2
3
4
5
# 逐行执行
slmgr /upk
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms zh.us.to
slmgr /ato

报错故障分析

因为无法验证开发者

第一种情况:首次运行这个小工具,可能会提示文件损坏,或提示无法验证开发者(如下图),记得在系统偏好设置—安全性和隐私中—通用允许这个程序即可

The command is available only in Parallels Desktop for Mac Pro or Business Edition

第二种情况:如果出现以上英文提示框报错,这是你的PD是标准版的,可以右键Docker栏的PD图标,选择关于Parallels Desktop,看是否有Pro Edition的标识,如果没有,就是标准版的,请安装专业版或者商业版的PD。或者用以上教程的第一种方法自动变成专业版,如果还是报错,说明的你的PD被锁定成标准版了。

Failed to get VM config

第三种情况:如果出现以上英文报错,就是你的虚拟机名称并非Windows 10,请关闭或者强行停止win10虚拟机,到PD控制中心重命名,注意大小写和空格。(Win10的标准名字是Windows 10,Win11的标准名字是Windows 11,Ubuntu的标准名字是Ubuntu Linux)

Failed to start the VM

第四种情况:如果出现类似以上的英文报错,说明你的虚拟机系统已经在 后台运行,可以手动运行PD,右键Docker栏的PD图标, 选择控制中心,查看虚拟机系统的运行状态,可以右键电源图标,选择关闭或者停止,然后重新运行我们的工具即可。 另外,如果你的虚拟机设置成融合模式,已经后台运行, 重复运行小工具也可能会有这个报错,建议关闭融合模式。

一、Orchestrator简介

简介

Orchestrator是一款开源对MySQL复制提供高可用、拓扑的可视化管理工具,采用go语言编写,它能够主动发现当前拓扑结构和主从复制状态,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换(failover)、手动主从切换(switchover)等功能。

Orchestrator后台依赖于MySQL存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,可以通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。

Orchestrator对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.

相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制拓扑关系的调整,并在此基础上,实现MySQL高可用。Orchestrator本身也可以部署多个节点,通过raft分布式一致性协议,保证其自身高可用性。

项目地址:https://github.com/github/orchestrator
相关文档:
GitHub的MySQL高可用性实践
MySQL高可用实现:Orchestrator在MyData中的应用与优化
MySQL高可用实现:主从结构下ProxySQL中的读写分离
MySQL高可用复制管理工具 —— Orchestrator使用
Graceful Master Switchover With ProxySQL And Orchestrator

对比

对比项 Orchestrator MHA
高可用 共享后端/raft 自身单点,且仅支持一次自动failover
数据一致性 半同步保证 半同步保证和复制reley_log
优雅主从切换 支持 支持
运维管理 支持可视化、api管理,自动发现复制拓扑,丰富的hooks,故障管理 配置复杂,至少三台MySQL实例
社区活跃 活跃 停止维护

部署

部署结构

选择Orchestrator/raft,后端数据库选择sqlite,命令行工具选择orchestrator-client
可参考:https://github.com/github/orchestrator/blob/master/docs/raft.md
node1:172.16.9.2、node2:172.16.9.3、node3:172.16.9.4

部署过程

当前版本(update:20210909):

版本
orchestrator 3.2.6 epel
orchestrator-client 3.2.6 epel
jq 1.6 epel
oniguruma 6.8.2 epel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# rpm安装
yum -y install orchestrator orchestrator-client jq oniguruma

# 配置orchestrator-client
cat >> /etc/profile.d/orchestrator-client.sh << EOF
ORCHESTRATOR_AUTH_USER=admin
ORCHESTRATOR_AUTH_PASSWORD=admin
ORCHESTRATOR_API="http://172.16.9.2:3000/api http://172.16.9.3:3000/api http://172.16.9.4:3000/api"
EOF

# 启动
cp orchestrator.conf.json /etc
mkdir -p /opt/orchestrator
mkdir -p /opt/orchestrator/raft
mkdir -p /opt/orchestrator/hooks
systemctl start orchestrator


# 访问
orchestrator-client -c raft-leader
http://leader:3000

配置

实例关联配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# orchestrator账号权限
CREATE USER 'orchestrator'@'orch_host' IDENTIFIED BY 'orch_topology_password';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'orch_host';
GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'orch_host'; -- 获取replication的访问凭证
GRANT SELECT ON meta.* TO 'orchestrator'@'%'; -- 获取集群的元数据信息

-- 元数据信息,用于orch的集群信息展示,目前仅作为展示,未直接使用
create database meta;
CREATE TABLE `cluster` (
`anchor` tinyint(4) NOT NULL COMMENT '集群标识',
`cluster_name` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
`cluster_domain` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
PRIMARY KEY (`anchor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 被监控的实例配置要求
# 配置用于发现从库信息
report_host和report_port

# 用于获取replication的访问凭证
master_info_repository = table

# 缩短故障检测时间 ,注意MASTER_HEARTBEAT_PERIOD的配置,默认为slave_net_timeout的一半,如果MASTER_HEARTBEAT_PERIOD大于slave_net_timeout,会出现主从频繁断开链接,导致MySQL实例错误日志增加的问题
slave_net_timeout = 4
CHANGE MASTER TO MASTER_CONNECT_RETRY=1, MASTER_RETRY_COUNT=86400, MASTER_HEARTBEAT_PERIOD=2;

# 搭配ProxySQL使用还需要默认设置实例read_only=1
# 启用GTID
Percona with GTID: promotable servers must have log_bin and log_slave_updates enabled. Replicas must be using AUTO_POSITION=1

1
2
$ brew link python
Linking /usr/local/Cellar/python/3.7.3... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

解决方法:

1
2
$ sudo mkdir /usr/local/Frameworks
$ sudo chown $(whoami):admin /usr/local/Frameworks

验证:

1
2
$ brew link python
Linking /usr/local/Cellar/python/3.7.3... 1 symlinks created

参考:
https://github.com/Homebrew/homebrew-core/issues/19286