youtube-dl调用aria2和ffmpeg下载合并视频

写在前面

youtube-dl官网:
youtube-dl最新发布版本下载地址:
aria2项目:
aria2最新发布版本下载地址:

1、基本用法

1
youtube-dl "视频文件网络路径"  --external-downloader aria2c --external-downloader-args "-x 16 -k 1M" -o f:/yz3.mp4

参数说明:
--external-downloader aria2c //调用外部下载工具
--external-downloader-args //外部下载工具指定参数
-x 16 //启用aria2 16个线程,最多就支持16线程
-k 1M //指定块的大小
代理
--proxy "https://127.0.0.1:1080"
//或者直接这样
--proxy 127.0.0.1:1080

附:【单独aria2的代理下载命令】
例如下载potplayer播放器:

1
2
aria2c  --https-proxy="http://127.0.0.1:7890" -o /path/to/save/ https://t1.daumcdn.net/potplayer/PotPlayer/Version/Latest/PotPlayerSetup64.exe
# --https-proxy="填写自己代理信息"

具体参见:
HTTP/FTP/SFTP Options

2、下载视频列表

1
2
3
youtube-dl [playlist_url] //下载视频列表,这种方式下载的视频可能是mkv格式或者webm格式
youtube-dl -cit [playlist_url] //下载视频列表,这种方式下载的视频可能是mkv格式或者webm格式
youtube-dl --yes-playlist [url] //当链接为视频列表,则下载该列表视频,跟上面的一样,可能是mkv或者webm格式

3、下载字幕

1
2
3
youtube-dl --write-sub --skip-download [url] //下载单独的vtt字幕文件,而不会下载视频
youtube-dl --write-sub --all-subs [url] //下载所有语言的字幕(如果有的话)
youtube-dl --write-auto-sub [url] //下载自动生成的字幕(YouTube only)

4、查看视频所有类型,只看不下载

1
youtube-dl -F "视频文件网络路径"  

5、下载指定质量的视频和音频并自动合并

1
youtube-dl -f [format code] [url]   //format code :视频+音频如:137+140
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
format code  extension  resolution note
249 webm audio only tiny 67k , opus @ 50k (48000Hz), 9.10MiB
250 webm audio only tiny 86k , opus @ 70k (48000Hz), 11.77MiB
140 m4a audio only tiny 131k , m4a_dash container, mp4a.40.2@128k (44100Hz), 22.87MiB
251 webm audio only tiny 157k , opus @160k (48000Hz), 22.30MiB
394 mp4 256x144 144p 84k , av01.0.00M.08, 25fps, video only, 11.84MiB
278 webm 256x144 144p 97k , webm container, vp9, 25fps, video only, 14.93MiB
160 mp4 256x144 144p 124k , avc1.4d400c, 25fps, video only, 13.26MiB
395 mp4 426x240 240p 182k , av01.0.00M.08, 25fps, video only, 22.28MiB
242 webm 426x240 240p 225k , vp9, 25fps, video only, 25.68MiB
133 mp4 426x240 240p 275k , avc1.4d4015, 25fps, video only, 21.26MiB
396 mp4 640x360 360p 379k , av01.0.01M.08, 25fps, video only, 41.58MiB
243 webm 640x360 360p 411k , vp9, 25fps, video only, 42.61MiB
134 mp4 640x360 360p 521k , avc1.4d401e, 25fps, video only, 36.68MiB
397 mp4 854x480 480p 661k , av01.0.04M.08, 25fps, video only, 68.76MiB
244 webm 854x480 480p 759k , vp9, 25fps, video only, 61.26MiB
135 mp4 854x480 480p 922k , avc1.4d401e, 25fps, video only, 52.38MiB
398 mp4 1280x720 720p 1255k , av01.0.05M.08, 25fps, video only, 123.54MiB
247 webm 1280x720 720p 1432k , vp9, 25fps, video only, 97.51MiB
136 mp4 1280x720 720p 1561k , avc1.4d401f, 25fps, video only, 86.93MiB
399 mp4 1920x1080 1080p 2244k , av01.0.08M.08, 25fps, video only, 212.73MiB
248 webm 1920x1080 1080p 2645k , vp9, 25fps, video only, 244.97MiB
137 mp4 1920x1080 1080p 4023k , avc1.640028, 25fps, video only, 253.08MiB
18 mp4 640x360 360p 503k , avc1.42001E, 25fps, mp4a.40.2@ 96k (44100Hz), 88.99MiB
22 mp4 1280x720 720p 621k , avc1.64001F, 25fps, mp4a.40.2@192k (44100Hz) (best)

6、批量下载

①各个视频地址列表下载

命令:

1
youtube-dl -f 22 -a list.txt

其中list.txttext文件格式
1
2
3
https://www.youtube.com/watch?v=*****
https://www.youtube.com/watch?v=*****
https://www.youtube.com/watch?v=*****

②批量下载“播放列表”的视频

格式:

1
https://www.youtube.com/playlist?list=

Ⅰ>下载列表中指定连续的内容(比如:--playlist-start 1 --playlist-end 27)
1
youtube-dl -f 22 -ci --playlist-start 1 --playlist-end 24 "https://www.youtube.com/playlist?list=*****"

Ⅱ>下载列表中指定的不连续内容(比如:--playlist-items 1,3-5,7, 21-27)
1
youtube-dl -f 22 -ci --playlist-items 1,3-5,7, 21-27 "https://www.youtube.com/playlist?list=*******"

7、ffmpeg 合并视频

①命令1:

1
ffmpeg -i "concat:yz1.mp4|yz2.mp4|yz3.mp4|yz4.mp4|yz5.mp4|yz6.mp4|yz7.mp4|yz8.mp4|yz9.mp4|yz10.mp4|" -c copy output.mp4

②命令2:

1
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

其中:filelist.txt

1
2
3
4
5
6
7
8
9
10
file  'F:\yz1.mp4'
file 'F:\yz2.mp4'
file 'F:\yz3.mp4'
file 'F:\yz4.mp4'
file 'F:\yz5.mp4'
file 'F:\yz6.mp4'
file 'F:\yz7.mp4'
file 'F:\yz8.mp4'
file 'F:\yz9.mp4'
file 'F:\yz10.mp4'

8、ffmpeg操作字幕

1>字幕相互转换

1
2
ffmpeg -i input.vtt output.srt
ffmpeg -i input.srt output.ass

2>把字幕压制到视频

1
ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4  

注意winass=subtitle.ass不能使用盘符,可使用相对路径