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/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...
随机推荐
- 机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)
TF-idf模型:TF表示的是词频:即这个词在一篇文档中出现的频率 idf表示的是逆文档频率, 即log(文档的个数/1+出现该词的文档个数) 可以看出出现该词的文档个数越小,表示这个词越稀有,在这 ...
- matplot读取文本文件画图
# -*- coding: utf-8 -*- """ Created on Fri Sep 7 18:38:35 2018 @author: manuel " ...
- elasticsearch-java异常
1. Unsupported major.minor version 52.0 java的jdk版本过低导致,需要更换为jdk1.8+ 2. elasticsearch 的version在pom中提示 ...
- Java重写equals方法(重点讲解)
为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...
- 447. Add Strings
原文题目: 447. Add Strings 解题: 字符串的当做整数来做加法,其实就是大数加法的简化版本 思路: 1)考虑不同位数,如"1234"+“45”,需要先处理低两位,再 ...
- android手机 解锁bootloader 刷recovery 线刷rom 卡刷rom
1 解锁bootloader 为手机安装官方驱动 按相应的组合键使手机进入fastboot模式 执行命令fastboot oem unlock 123456 (123456为厂家提供的解锁码) 手机重 ...
- asp.net 服务器 上传文件到 FTP服务器
private string ftpServerIP = "服务器ip";//服务器ip private string ftpUserID = "ftp的用户名" ...
- The iOS 7 Design Cheat Sheet
http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/
- centos7.5下yum 安装mariadb数据库
前言 mariadb 和mysql就像亲兄弟的关系,各种语法.驱动啥的,在mysql上能上的,在mariadb上基本都可以直接使用.更多的细节在此不多说. 1.删除旧版本 centos7下默认安装有m ...
- CentsOS6 Tomcat7 报javax.management.InstanceNotFoundException 解决办法
警告: Failed to unregister MBean with name [Catalina:j2eeType=Servlet,name=UploadServlet,WebModule=//l ...