Python: 调用youtube_dl实现视频下载
研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思。
记录初始心得。界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下:
# encoding: utf-8 from __future__ import unicode_literals
from PySide.QtGui import *
from PySide.QtCore import *
from main_ui import *
import youtube_dl
import threading class MainWindow(QMainWindow, Ui_Main):
update_info = Signal(dict) def __init__(self, parent=None):
super(MainWindow, self).__init__(parent) self.setupUi(self)
self.btnGet.setEnabled(False)
self.txtUrl.setText('https://www.youtube.com/watch?v=dvSLaHj9VVM')
self.update_info.connect(self.safe_hook_progress) def hook_progress(self, d):
self.update_info.emit(d) def safe_hook_progress(self, d):
info = ''
if d['status'] == 'downloading':
info = 'downloaded_bytes: ' + str(d['downloaded_bytes']) + ', elapsed: ' + str(
d['elapsed']) + ', speed: ' + str(d['speed']) + ', filename: ' + d['filename'];
elif d['status'] == 'finished':
info = '\r\ncomplete!'
self.txtUrl.setEnabled(True)
self.btnGet.setEnabled(True)
if info != '':
self.txtInfo.append(info)
# self.txtInfo.setText(info) def get_opts(self):
ydl_opts = {
'format': 'bestvideo',
# 'outtmpl': os.path.join(app.config['VIDEOS_FOLDER'], '%(id)s.%(ext)s'),
# 'logger': MyLogger(),
'progress_hooks': [self.hook_progress],
}
return ydl_opts def download(self, url):
print 'download......', url
if url.strip() == '':
return ydl = youtube_dl.YoutubeDL(self.get_opts())
ydl.download([url]) @Slot()
def on_txtUrl_returnPressed(self):
if self.btnGet.isEnabled():
self.btnGet.click() @Slot(str)
def on_txtUrl_textChanged(self, s):
self.btnGet.setEnabled(s != '') @Slot()
def on_btnGet_clicked(self):
self.txtUrl.setEnabled(False)
self.btnGet.setEnabled(False)
self.txtInfo.setText('')
t = threading.Thread(target=MainWindow.download, args=(self, self.txtUrl.text()), name='thread')
t.start()
效果如图所示:
参考:
Python: 调用youtube_dl实现视频下载的更多相关文章
- 【转】python调用youtube-dl实现视频下载
youtube-dl是一个命令行程序,用于从YouTube.com和更多网站下载视频.它需要Python解释器,版本2.6,2.7或3.2+,并且支持Unix,Windows或Mac OS X中运行. ...
- python学习路线以及视频下载
作者:林其链接:https://www.zhihu.com/question/19660572/answer/194904019来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决
1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName> 或者/data/data/<pakeageName>找到插 ...
- python实现视频下载
最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容.如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来,不仅方便自己观看,还可以将没有版权的视频发布在个人社交网站 ...
- Python调用ffpmeg和ffprobe处理视频文件
需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...
- 手把手教你用python打造网易公开课视频下载软件2-编码相关说明
函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...
- 手把手教你用python打造网易公开课视频下载软件1-总述
写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...
- python调用mediainfo工具批量提取视频信息
写了2个脚本,分别是v1版本和v2版本 都是python调用mediainfo工具提取视频元数据信息 v1版本是使用pycharm中测试运行的,指定了视频路径 v2版本是最终交付给运营运行的,会把v2 ...
- Python 爬虫 Vimeo视频下载链接
python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...
随机推荐
- electron安装到第一个实例
1.node.js下载,然后安装.下载地址:链接:http://pan.baidu.com/s/1o7TONhS 密码:fosa 2.cmd下输入:npm install electron-prebu ...
- CSS中clear属性的both、left和right浅析
前端开发中,我们知道clear属性有none.both.left和right四个值. 它们的具体含义如下: none:允许两边都可以有浮动对象: both:不允许有浮动对象; left:不允许左边有浮 ...
- 使用dig或nslookup指定dns服务器查询域名解析
一般来说linux下查询域名解析有两种选择,nslookup或者dig,而在使用上我觉得dig更加方便顺手.如果是在linux下的话,只要装上dnsutils这个包就可以使用dig命令, 安装bind ...
- 使用大于16TB的ext4文件系统
我们的电脑想要快速开机,需要具备三个条件:第一是主板支持UEFI,二是系统支持UEFI(Win8),最后就硬盘需要采用GPT分区. GPT分区全名为Globally Unique Identifier ...
- Redis进阶实践之四Redis的基本数据类型(转载4)
Redis进阶实践之四Redis的基本数据类型 一.引言 今天正式开始了Redis的学习,如果要想学好Redis,必须先学好Redis的数据类型.Redis为什么会比以前的Memchaed等内存缓存软 ...
- ORACLE常用操作命令
1.ORACLE实例启动.停止 SQL>startup; #启动ORACLE实例 SQL>shutdown immediate; #关闭ORACLE实例,常用.阻止新用户连接且阻止已连接 ...
- Hibernate 再接触 一对多单向关联
在1的方向加多的集合 Group.java package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; i ...
- android事件处理概括
什么是事件处理? 事件处理就是针对用户的一些特定操作,进行相对应的回馈.时间处理也是程序开发中的人机交互的一个非常重要的体现.事件处理中,事件源是事件的起始位. 一.事件处理三要素 事件源——事件—— ...
- CXF使用JMS作为传输协议的配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- yyyy-MM-dd 转换为年月日
yyyy-MM-dd 转换为年月日 先用parse转成date型,再用format转成string. Date date = new SimpleDateFormat("yyyy-M ...