TA的每日心情 | 郁闷 2024-1-6 12:13 |
---|
签到天数: 11 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 36442
|
本帖最后由 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[ext=mp4][fps<61]+bestaudio[ext=m4a]/best[ext=mp4]/bestvideo+bestaudio/best)[protocol^=http]" --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[ext=mp4][fps<61]+bestaudio[ext=m4a]/best[ext=mp4]/bestvideo+bestaudio/best)[protocol^=http]"
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[ext=mp4][fps<61]+bestaudio[ext=m4a]/best[ext=mp4]/bestvideo+bestaudio/best)[protocol^=http]"
# 下载简繁字幕并转换为srt格式 #
--write-sub --sub-lang zh-CN,zh-TW,zh-Hans,zh-Hant,zh-HK --convert-subtitles srt
# 将下载的封面封入视频[mp4格式限定]或音频[mp3格式限定] #
--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档案[7.28号的源码版本]。链接: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[IDM的mkv格式混流功能有问题,建议选择mp4格式]
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
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|