cnlolicon 发表于 2020-8-28 19:10:50

win10下youtube-dl下载y2b视频简易教程

本帖最后由 cnlolicon 于 2020-9-16 10:32 编辑

在youtube-dl使用过程中,于网络上搜集到的中文yt-dl教程往往浅尝则止,多数仅会止步于cmd传参下载这一步,作为例子使用到的参数也相对基础,对入门可能够用了,但想稍稍更进一步往往不得其门,而一些有进阶应用的帖子往往又各有深入,有鉴于此,个人整合了一个教程,也算是个总结。
先简单总结下完全配置完的效果:利用配置conf文件从而在cmd下使用youtube-dl <url>这样简短的传参就可以调用aria2加速,指定视频格式和音轨格式,下载指定语言的vtt字幕并转换为srt格式,下载每个视频的封面并封入mp4格式的最终视频成品中。

=====================================
毕竟是给新手看的,对这样的配置效果不感兴趣或觉得太小白的已经可以✘了。

以上的效果会分点说明,有需求的只需要看对应的就好了。
默认看教程的已有代理环境,不作展开。
=====================================


1.环境配置
1-1.准备需要的软件【我使用的都是编译版】,全部放到一个全英文路径的文件夹下[为方便后续说明我放在C:\youtube文件夹下]:
①.youtube-dl.exe [http://ytdl-org.github.io/youtube-dl/download.html] 点击windows exe下载
②.ffmpeg.exe [https://ffmpeg.zeranoe.com/builds/] 点击download build下载【仅需要bin文件夹下3个.exe文件】
    ffplay.exe
    ffprobe.exe
③.aria2c.exe [https://github.com/aria2/aria2/releases] 点击aria2-1.35.0-win-64bit-build1.zip 下载 【仅需要aria2c.exe】
④.AtomicParsley.exe [https://sourceforge.net/projects/atomicparsley/files/] 点击 download latest version下载

提供个目前为止最新的链接:链接:https://pan.baidu.com/s/1BUY7E4J6u5WyY6h-jDxFlA 提取码:dp2x
------------------------------
准备好的文件夹应该如图所示,这里只是为方便管理,每种工具自建一个文件夹也是可以的,只是环境变量那里需要添加4个路径而已:


1-2.添加环境变量:
win+R 呼出运行界面键入sysdm.cpl - 调出系统属性面板 - 高级 - 环境变量 - 双击用户变量/系统变量的path栏 - 添加C:\youtube到环境变量即可
【用户变量和系统变量任选其一添加环境变量在当前登录账号下都是可以生效的,有多个登录账号的的请添加系统变量。】

到这里其实youtube-dl就可以用了,而且由于youtube-dl会自动获取系统代理,cmd下youtube-dl <视频url>已经可以直接默认下载最高质量的视频。[个人环境win10下 ssr,sstap,netch均可生效]

1-3a.经@cedar提醒,可通过shift+鼠标右键呼出当前文件夹路径下powershell来传参【替代CMD传参】建议无特殊要求的使用powershell,保留1-3b给有需求的人参考

1-3b.右键菜单添加 "open cmd"和"open cmd (admin)"【会改注册表,感觉存疑的可不做】
想想还是提下这个,这个可以配合后续配置文件部分的-o参数和--download-archive命令食用。
作用简单点讲,省去了win+r调用cmd后一路cd到当前文件夹的操作,在任意文件夹内右键即可调出当前路径下cmd。
具体操作见帖 https://www.jianshu.com/p/0c21406eb866
不想爬贴的下载 [https://pan.baidu.com/s/15hCL68sgaz8r5ifKeMWRfw 提取码:huud] 解压出.reg文件后双击即可生效。

2.配置文件youtube-dl.conf的应用

2-0.先举个例子:比如我想下载jflamusic频道下2018.01.01-2019.02.04时间段的所有视频 ,指定要mp4格式最高质量,下载简繁字幕并转成srt格式,下载封面并使用AtomicParsley将封面封装入视频,记录我这次下载的所有视频id方便下次下载时跳过,将视频上传日期写入视频文件名开头来排序,调用aria2多线程加速,那么我cmd要怎么传参呢?
youtube-dl --proxy 127.0.0.1:2802 -o"%(upload_date)s - %(title)s.%(ext)s" --dateafter 20180101 --datebefore 20190204 --format "(bestvideo+bestaudio/best/bestvideo+bestaudio/best)" --write-sub --sub-lang zh-CN,zh-TW,zh-Hans,zh-Hant,zh-HK --convert-subtitles srt --write-thumbnail --embed-thumbnail https://www.youtube.com/c/JFlaMusic/videos?view=0&sort=dd&shelf_id=0 --external-downloader aria2c --external-downloader-args "-x 16 -s 16 -k 1M"每次都这样是很麻烦的,像是文件名的格式,下载的视频质量,字幕语言和字幕转换,调用aira2加速下载的参数都是可以固定下来的,不必每次cmd传参都输入一遍,youtube-dl.conf的存在就是为了设置相对固定的命令,而且并不影响cmd下添加其他的命令来灵活配合使用。
注意【标红的引号为双】:
cmd中传参只能用":
-o "%(upload_date)s - %(title)s.%(ext)s"
--format "(bestvideo+bestaudio/best/bestvideo+bestaudio/best)"
youtube-dl.conf中则比较特殊单'和双" 均能生效,但为一致性建议用" 。


youtube-dl.conf配置文件的制作十分简单,新建一个txt文档,写入常用的准备固定不动的参数,保存后将.txt的后缀名改为.conf即可,然后将这个文件放入C:\用户\当前账户 的路径下即可生效。

自用的配置文件【.conf文件中不要有中文不要有中文不要有中文,下面的中文仅作说明,实际使用请删除】:
==================================================
# 忽略错误继续下载,可以和-download-archive配套使用 #
--ignore-errors
# 放弃连接前等待时间 #
--socket-timeout 10
# 重试次数无限 #
--retries infinite
# 记录下载过的视频id #
--download-archive archive.txt
# 调用aria2多线程并挂载代理,代理部分请具体按照个人情况配置,比如端口号不是1080的做相应修改 #
--external-downloader aria2c --external-downloader-args "--all-proxy=http://127.0.0.1:1080 --file-allocation=prealloc -x 16 -s 16 -k 1M"
# 将视频上传日期写入文件名 #
-o "%(upload_date)s - %(title)s.%(ext)s"
# 下载封面 #
--write-thumbnail
# 指定以mp4格式下载最高质量视频 #
--format "(bestvideo+bestaudio/best/bestvideo+bestaudio/best)"
# 下载简繁字幕并转换为srt格式 #
--write-sub --sub-lang zh-CN,zh-TW,zh-Hans,zh-Hant,zh-HK --convert-subtitles srt
# 将下载的封面封入视频或音频 #
--embed-thumbnail
==================================================

youtube-dl更多的命令和相应中文说明见贴:https://www.cnblogs.com/zhaobang/p/7192684.html


我会具体提几个我常用的命令和功能的坑和取舍
更多的参数应用和说明可见附录部分给出的教程链接。
【2-1】内容废弃 [已设置为灰色],youtube-dl 2020.09.14更新版本已修复下载webp格式封面后无法封装的问题【添加了转换webp to jpg的代码】,无需再自己打补丁编译。应用--write-thumbnail 和 --embed-thumbnail命令即可自动完成封装。保留exe编译步骤给需要打其他补丁的朋友参考。
2-1.--write-thumbnail 和 --embed-thumbnail【解决webp格式封面无法封装问题,不需要封装封面到mp4视频的跳过】
--write-thumbnail 下载视频封面
--embed-thumbnail 将下载的封面封装入视频/音频
这两个参数一起讲,--write-thumbnail 没什么好说的,--embed-thumbnail则涉及了调用AtomicParsley.exe的问题,现在的youtube网站比较新的视频封面下载下来后都是webp格式的,而AtomicParsley.exe官方文档有说明只能识别jpg和png这两种格式的封面,youtube-dl并没有转换webp到jpg的参数,我尝试过下载比较老的封面依然是jpg格式的视频,封面可以封入MP4视频。


到这里就有3个选择:
1.放弃这个功能,这是个很好的选择:
①放弃个边缘需求
②这个封装会影响下载格式选择和音频质量取舍:由于AtomicParsley.exe仅支持将封面封入mp4,所以下载视频的时候就不能选择vp9和opus,我对vp9没什么看法,但是选择mp4的话youtube的AAC音频似乎一刀切了16khz以上的部分,详见此贴:https://www.jianshu.com/p/1580211a7e19
③用此方法封装的MP4视频在kodi下无法使用自动播放下一个视频的功能,会卡住【使用环境大法电视+18.0 kodi】。


2.下载好封面后先做批量转换到jpg/png的工作,选择很多各位随意,再调用AtomicParsley.exe进行,具体自行参考AtomicParsley.exe下载随附的使用说明PDF档。


3.使用https://github.com/ytdl-org/youtube-dl/pull/25717这个issue下alexmerkel fork的补丁来修复,可以自动转换webp文件到jpg并完成封装,省心好用,需要使用pyinstaller编译youtube-dl源码。
或者用我编译好的exe档案。链接:https://pan.baidu.com/s/1FRvGNNHGC2EXGk2d9-y4CA提取码:pzly
随附了替换用的embedthumbnail.py脚本,由于重编译,就不能使用youtube-dl -U命令更新了,会覆盖当前的档案,需要下载最新版的源码替换打好补丁的embedthumbnail.py后重新编译为exe档案来更新。
附上编译方法:
① [http://ytdl-org.github.io/youtube-dl/download.html] 点击【full source+docs+binary tarball 】下载源码包并解压,
从https://pan.baidu.com/s/1FRvGNNHGC2EXGk2d9-y4CA提取码:pzly下载 embedthumbnail.py.rar解压出embedthumbnail.py文件替换源码文件夹youtube_dl\postprocessor路径下同名文件,或者从https://github.com/alexmerkel/youtube-dl/commit/f6513e1a9302ab601460133804e0c06f1595279a下载代码自行修改embedthumbnail.py文件
②进入源码包youtube-dl文件夹下找到__main__.py【注意文件名中__其实是2个_】这个文件,右键菜单打开cmd【或者进cmd后cd命令进入此文件夹下】,安装pyinstaller
<font color="#c0c0c0">pip install pyinstaller</font>
③编译
<font color="#c0c0c0">pyinstaller __main__.py --onefile --name youtube-dl</font>编译成功会生成一个youtube-dl.exe文件,替换原来的exe档案就好。

2-2.调用Aria2挂载代理问题
在cmd下直接传参,使用-- proxy 127.0.0.1:1080是可以直接生效让aria2成功工作的,比如
youtube-dl --proxy 127.0.0.1:1080 https://www.youtube.com/watch?v=7E-cwdnsiow --external-downloader aria2c --external-downloader-args "-x 16 -s 16 -k 1M"
但是如果要在配置文件中生效,则须使用如下格式挂载代理才能生效
--external-downloader aria2c --external-downloader-args "--all-proxy=http://127.0.0.1:1080--file-allocation=prealloc -x 16 -s 16 -k 1M"我的环境下使用ssr和netch均是如此。还有就是aria2在下载youtuber们的playlist的时候非常难调用,所以建议批量下载使用/videos路径下载,基本可以全程调用。aria2的配置文件这里不做展开,有兴趣的自行摸索。

2-3.-o 指定文件名和下载路径
直接举例:指定默认下载路径为在youtube文件夹下生成download文件夹并以上传者名字建立文件夹放入视频,上传日期写入视频文件名
-o C:/youtube/download/%(uploader)s/"(upload_date)s - %(title)s.%(ext)s"-o 支持将下载过程中获取的上传者信息和播放目录信息用作生成路径,对喜欢规整的人来说应该很有用。

2-4.--download-archive 的路径问题
--download-archive能够记录下载过的视频id,下载一整个频道或者播放列表有后续更新时会很好用,但也有坑:
不设置路径,配合右键菜单cmd,在哪个文件夹下进入cmd,记录视频id的archive.txt文件就会生成在哪个文件夹。--download-archive archive.txt设置archive.txt的路径,只能设置固定路径,比如:
--download-archive C:/youtube/archive.txt--download-archive和-o不同,不支持灵活的路径设定,issue中有相关的讨论,似乎是为了可靠性[一定能索引到]。也就是说,先天不支持配合-o命令在每个youtuber的文件夹下自动生成对应的archive.txt。而是从使用开始所有下载过的视频id都记录在一个固定的路径下的archive.txt,如果不管,下载的量多了id就会成千上万。

建议:
1.不会整个频道一起下载或者只会零碎下载点视频的可以不使用这个命令,或者换用IDM
2.-o 和--download-archive命令均不设置路径,自己新建好相应文件夹后cmd进入该文件夹路径后再下载,这样会默认将视频和archive.txt下载到当前文件夹,就可以独立不同youtuber的视频id记录,缺点是第一次要手动建立文件夹,而且后续更新下载要先找到该youtuber的文件夹。


2-5.字幕下载,语言选择和转换
--write-sub
--sub-lang zh-CN,zh-TW,zh-Hans,zh-Hant,zh-HK
--convert-subtitles srt
--write-sub下载youtube字幕默认都是vtt字幕,所以一定要接续--convert-subtitles srt命令做转换,其实还有一个--embed-subs 可以直接将字幕封入视频,但我没有找到可以指定默认字幕的指令,封入后字幕会全部显示为chinese也是个问题,更不用说很难再对字幕做调整。--sub-lang命令中,基本简繁字幕就是zh-CN,zh-TW,zh-Hans,zh-Hant,zh-HK 这些后缀了,还有可能常用的也就是en和ja,如果出现获取不到的情况使用--list-subs命令先获取字幕详细信息,全用上防止会有遗漏的情况,使用--write-sub接续--skip download命令虽然可以后续补下字幕而不重复下载视频,但--convert-subtitles srt命令无法生效,只会下载vtt字幕不做转换。

2-6.下载分辨率设定问题
这里我不建议下载youtube网站自己转换的各种二压分辨率,如果硬盘吃紧,比如最高是4k,想下载1080p,建议下载最高质量后用ffmpeg -crf 18和-vf scale参数压制,哪怕其它都是默认参数也比y2b网站自己二压的强,体积还不会超出很多,我甚至下到过1080p 1500k码率的视频,原始分辨率4k很清晰,1080p分辨率却糊成一团。

附录【参考过的帖子或讨论,有的讲的很细,值得看】:
https://www.jianshu.com/p/5143faa6056d
https://sspai.com/post/42409
https://www.jianshu.com/p/1580211a7e19
https://www.jianshu.com/p/0c21406eb866
https://www.cnblogs.com/zhaobang/p/7192684.html
https://github.com/ytdl-org/youtube-dl/pull/25717
https://stackoverflow.com/questions/55561387/how-to-rebuild-python-youtube-dl-from-the-source
https://ywnz.com/linuxjc/5418.html




















心叶 发表于 2020-8-28 23:37:52

看到jflamusic我就不淡定了

对于一个看到代码就头疼的人当初也找过批量下载油管的办法
设置好变量怎么也学不成批量下载,只能一个一个地来,直接放弃了

还是IDM手动整吧,就是费点时间点击

至于J.FLA,谁不喜欢美女姐姐呢{:12_858:}
就刚刚下载了最新的视频……





至于这贴先收藏了,哪天需要大批量地下载我再来奋斗学习……



cnlolicon 发表于 2020-8-29 09:10:07

本帖最后由 cnlolicon 于 2020-8-29 09:46 编辑

心叶 发表于 2020-8-28 23:37
看到jflamusic我就不淡定了

对于一个看到代码就头疼的人当初也找过批量下载油管的办法

和我当年用idm时一样有毅力{:4_675:}j.fla的还好,也就100多个视频,即便idm下载边看边点分批下压力也不算大,最麻烦的反而是双语歌词字幕部分的取舍和双语样式自订


我是全部一个一个手动改的,改的心累,但改完看的时候就很舒服了{:4_677:}
最恶心的是当年下一个老头子Per-Olov Kindgren的古典吉他视频,350+,当年下完的时候看屏幕都重影了,直到了解到youtube-dl原生支持批量下载youtuber/videos下的视频,我佛了{:4_682:}
---------------------------------------------
对了,我帖子里也有写还是再提醒下:1.idm的mkv格式混流功能可能有点问题,建议mkvtoolnix重混流下,j.fla的视频比较短可能看不出来,时间20min以上的播放器mpc-be播放时会有一个加载读条的过程。

2.油管本身提供的mp4格式的AAC格式音频一刀切了16khz以上的讯号部分(看这个帖子:https://www.jianshu.com/p/1580211a7e19),建议idm下载的时候选择mkv或者webm格式,这2种格式基本音频部分都是opus,opus没砍。不过vp9和opus在电视端又可能出现格式兼容的问题,看取舍了。

cedar 发表于 2020-8-29 13:55:47

为什么要把封面也封装进去, 单独摆在外面不好么..
另外powershell也挺好用吧, 为什么要改成cmd..

cnlolicon 发表于 2020-8-29 14:49:48

本帖最后由 cnlolicon 于 2020-8-29 14:57 编辑

cedar 发表于 2020-8-29 13:55
为什么要把封面也封装进去, 单独摆在外面不好么..
另外powershell也挺好用吧, 为什么要改成cmd.. ...

为什么要把封面也封装进去, 单独摆在外面不好么..

我的看法:封面可以存在[乖乖呆在mp4容器里],要么消失。我的本地漫画全部cbr格式打包,电视上用kodi时从来不开海报模式,字幕一定会建subtitles文件夹塞进去,外置音轨建audio文件夹塞进去或重混流。打包封面的用法仅限在win10端资源管理器使用,单独存在的图片在我的硬盘里可能仅限cd包里的cover,我个人的认知单张的图片文件就是零碎文件,能打包就打包,只能说是习惯问题。喜欢封面单独存在注释掉--embed-thumbnail就好了。

另外powershell也挺好用吧, 为什么要改成cmd..
习惯cmd了,我知道你是想吐槽shift+鼠标右键就可以呼出poweshell的问题,看到你提才想起来,平时都是用cmd我忘记了{:4_675:}。

cedar 发表于 2020-8-29 18:56:32

cnlolicon 发表于 2020-8-29 14:49


主要是, 我担心图片编码改变的话会造成质量损失, 而且webp的体积小, 将来的支持程度会越来越高的

唔..我以为你知道Shift+右键可以呼出Powershell..因为你贴的链接在一开头就有个前情摘要..

cnlolicon 发表于 2020-8-29 19:38:27

本帖最后由 cnlolicon 于 2020-8-29 19:40 编辑

cedar 发表于 2020-8-29 18:56
主要是, 我担心图片编码改变的话会造成质量损失, 而且webp的体积小, 将来的支持程度会越来越高的

唔..我 ...
......shift+右键呼出我知道啊{:4_686:},win10 1703版本前也是可以这组快捷键呼出cmd的只是后续版本更新取消了,我推测就是为了推powershell吧,我用win10用的比较早,powershell刚出的时候就好奇用了一段时间遇到过坑印象不怎么好所以还是习惯用cmd,我一般只有重装系统后卸载捆绑应用用一下powershell,写这贴的时候完全忘记了win10还有个powershell。
至于webp to jpg的问题,那点质量损失,我觉得只是作为资源管理器下视频图标显示而言完全够用了,更不用说很多封面质量并算不得出色,特地还要在文件夹里占个位置我个人而言是敬谢不敏。

心叶 发表于 2020-8-30 01:26:58

cnlolicon 发表于 2020-8-29 09:10
和我当年用idm时一样有毅力j.fla的还好,也就100多个视频,即便idm下载边看边点分批下压力也不算 ...

我一开始下载任何油管视频都是挑MP4的,但是IDM不是每个视频都会弹出MP4或MKV
只是当时MKV比较多,为了统一我把MP4全删了,一律收VP9+OPUS

你看我的截图最新那个是MP4的,我刚又去看了下,MKV出来了……
画质上来看我觉得VP9比较好,AVC比较糊的

加载读条没留意过,可否截图让我看下症状
或者把该视频的油管地址发来,我下载看看


我用POT+MPC-HC


cnlolicon 发表于 2020-8-30 09:17:31

心叶 发表于 2020-8-30 01:26
我一开始下载任何油管视频都是挑MP4的,但是IDM不是每个视频都会弹出MP4或MKV
只是当时MKV比较多,为了统 ...

我录了一个演示 链接:https://pan.baidu.com/s/13aoZ8kvm1P07A5D8gMwQSA 提取码:3jk1

多见于4k分辨率视频vp9+opus最高质量下载的情况,我主力是mpc-be,会有这个问题,再加上各种4k电影下载的也不算少,从未有过读条的情况,极端例子:下载youtube上4k分辨率的3-4小时的游戏剧情电影读条时间能达到7秒以上{:4_686:},我用mkvtoolnix重混流后这个现象就会消失,我只能判断为是IDM本身mkv混流功能有问题。

mpc-hc我本地也有,默认皮肤是不会有这种问题,pot弃用很多年就不清楚了。

心叶 发表于 2020-8-30 13:15:42

cnlolicon 发表于 2020-8-30 09:17
我录了一个演示 链接:https://pan.baidu.com/s/13aoZ8kvm1P07A5D8gMwQSA 提取码:3jk1

多见于4k分辨率 ...

应该是你BE的问题了
我刚测试了两个4K超过20分钟的视频HC和POT都没有
页: [1]
查看完整版本: win10下youtube-dl下载y2b视频简易教程