you-get的一点修改
一直用you-get这个python写的开源软件下载一些视频网站的视频(主要是太烦不断插入的广告),最近看了点python,就对于自己觉得不够方便的地方,尝试修改。因为感觉他的github上提交修改建议不方便,所以就自娱自乐算了。
主要改动是在extractor.py这个文件。一是p(self, stream_id=None):这个函数,我加了句,目的是显示视频所带的字幕数。因为我只懂中文和英语,如果是其他语言的视频,如果没有字幕,下载了也没法看。所有有必要在下载前,先看下有没有字幕。
改动很简单,就是在这个函数的末尾,加了句:
print("Number of subtitles: " + str(len(self.caption_tracks)))
另外一个改动,本来运行时,加上-i 参数,就只显示可用视频流,码率,大小等信息,但不下载。这本来很好,下载前先看下,选择最清晰的视频流下载。问题是加上-i 参数后,如果想下载,就又要运行一次,去掉-i 参数,才可以下载。每运行一次,就会重新解析一下网页,这没有必要。于是改了下download(self, **kwargs)函数(天蓝色部分是改动内容)
isDownload = True
stream_id = ''
if 'json_output' in kwargs and kwargs['json_output']:
json_output.output(self)
elif 'info_only' in kwargs and kwargs['info_only']:
if 'stream_id' in kwargs and kwargs['stream_id']:
# Display the stream
stream_id = kwargs['stream_id']
if 'index' not in kwargs:
self.p(stream_id)
else:
self.p_i(stream_id)
else:
# Display all available streams
if 'index' not in kwargs:
self.p([])
else:
stream_id = self.streams_sorted[0]['id'] if 'id' in self.streams_sorted[0] else self.streams_sorted[0]['itag']
self.p_i(stream_id)
userInput = input("Choose stream id to download or ENTER to exit: ")
if not userInput:
isDownload = False
else:
stream_id = userInput if isDownload == True:
if stream_id == '':
这样,下载前先加上 -i 参数,看下视频信息,然后输入视频的tag号就可以开始下载,否则直接回车退出。
you-get的一点修改的更多相关文章
- 修改XPMenu让ToolButton在Down=True时正确显示
XPMenu是一个不错的程序界面效果控件,但它也存在不少不足之处.我最近又对它作了一点修改. 原因是我在程序里有一个ToolButton,其Style=tbsButton,当Down=True时,XP ...
- 修改QGIS来支持DPI为96的WMTS/WMS服务
缘由 因为各种各种wmts地图客户端产品的标准的支持不一定是一致的,就像ArcGIS不同版本加载WMTS图层的时候计算的规则就有差别(米和经纬度之间转换系数的区别),导致会出现适应各个客户端而出的WM ...
- Linux 完整的修改用户名,用户组的方法记录
今天将虚拟机内所有的用户都是统一规划自己的名字,方便识别操作,特记录相关修改Linux 用户名以及修改用户组的方法 第一种方式,直接改相关文件: /etc/passwd 如图所示,改为自己想用户名,描 ...
- EOS dice移到1.8版本的修改汇总
EOS dice移到1.8版本的修改汇总 1. CORE_SYMBOL 被去掉了,需要自己在文件中声明eg: uint64_t string_to_symbol_c(uint8_t precision ...
- 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯 ...
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- HTML5应用程序缓存Application Cache
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- 当AngularJS POST方法碰上PHP
问题描述 怎么POST过去给PHP都收不到资料? $_POST方法取不到正确的传入值! 原理说明 AngularJS这套framework使用的AJAX方法中,资料传递的格式为JSON,送出去的hea ...
随机推荐
- .net core 发布程序命令(自带运行环境)
dotnet publish -c Release -r linux-x64 --self-contained true
- ~~网络编程(三):TCP/UDP~~
进击のpython ***** 网络编程--TCP/UDP协议 其实你也发现了,应用层是交给应用来处理的,我们什么也做不了 相较于网络编程来说,我们更重要的是在做应用层和传输层的对接 因为你也看到了, ...
- 缓存利器、Lua模块下的共享内存
上一节讲到了worker进程的共享内存,它利用丰富的指令使数据的缓存操作变得非常简单,但它也存在一些缺点. 1.worker进程之间会有锁竞争,在高并发的情况下会增加性能开销.2.只支持Lua布尔值. ...
- 线程_gevent实现多个视频下载及并发下载
from gevent import monkey import gevent import urllib.request #有IO操作时,使用patch_all自动切换 monkey.patch_a ...
- Codeforces Round #654 (Div. 2) A~E 题解
LINK:CF R 654 div2 前言:F题是一个线段树分类讨论的题目 比赛的时候没看 赛后感觉没什么意思 所以咕掉了. 记事:第一次笼统的写一场比赛的题目 可能是我这场比赛打的太差了 题目不难 ...
- 畅购商城(四):Lua、OpenResty、Canal实现广告缓存与同步
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...
- .Net Core 3.0下AOP试水~~
昨天躺了一下3.0的依赖注入的雷 今天顺势把AOP做了一下调整,比如自动化的AOP注入 默认的Program里面的CreateHostBuilder方法增加一行 public static IHost ...
- 在不同网段使用 VLAN 通信 - SVI,单臂路由
在 VLAN 这篇文章中知道,设置 VLAN 目的是隔离大型的广播域,将其分成很小的广播域,从而更好的管理.但也就带来了一些问题:如流量不能在不同的 VLAN 间通信. 而为了解决这个问题,可以采用如 ...
- 一站式搞定Ubuntu共享环境配置
1. 添加linux用户 安装的开发用的虚拟机,一般不直接使用root账户,会新建一个普通用户,然后在/etc/sudoers添加上sudo的权限即可. 使用如下命令: sudo adduser -- ...
- 033_go语言中的打点器
代码演示 package main import "fmt" import "time" func main() { ticker := time.NewTic ...